0
%
正确率
0
/30
答对题目数
0
分钟
用时
单选题
Java
1.
Java Application 源程序的主类是指包含有( )方法的类。
A
public static void main方法
B
toString方法
C
init方法
D
actionPerfromed方法
正确答案:A
你的答案:未作答
官方解析:
Java应用程序必须包含一个主类(Main Class),这个主类中必须包含public static void main(String[] args)方法作为程序的入口点。因此A选项是正确的。

public static void main方法具有以下重要特征:
1. public - 表示方法可以被JVM访问
2. static - 表示无需创建类的实例即可调用
3. void - 表示方法无返回值
4. main - 固定的方法名称
5. String[] args - 命令行参数数组

分析其他选项:
B选项toString方法:这是Object类的方法,用于返回对象的字符串表示,不是程序入口点
C选项init方法:通常用于初始化操作,不是Java程序的标准入口点
D选项actionPerformed方法:这是事件处理方法,常用于GUI编程,不是程序的入口点

要特别注意的是,一个Java应用程序可以包含多个类,但必须有且仅有一个类包含main方法作为程序的入口点。JVM在运行程序时会首先寻找并执行这个main方法。
知识点:Java
题友讨论(25)

已经看了解释

已经看了解释

1 回复
发布于 2018-12-17 00:04
java程序种类:
1.内嵌于web文件中,有浏览器观看的applet
2.可独立运行的application
3.服务器端的servlets
java程序种类:
1.内嵌于web文件中,有浏览器观看的applet
2.可独立运行的application
3.服务器端的servlets
67 回复
发布于 2017-06-05 09:34
什么意思啊 就看懂第一个
什么意思啊 就看懂第一个
1 回复
发布于 2020-08-10 18:17
0
Java web 吧好像
Java web 吧好像
点赞 回复
发布于 2020-09-16 23:26 来自iOS客户端
0
一个类的内部可以有多个方法名为main的方法啊,是有定义为 public static void的main方法才是主类吧
一个类的内部可以有多个方法名为main的方法啊,是有定义为 public static void的main方法才是主类吧
14 回复
发布于 2017-08-12 00:13
7 回复
发布于 2022-08-13 19:12
转大佬解释的图片方便自己复习

转大佬解释的图片方便自己复习

3 回复
发布于 2023-06-08 15:11 江西
下面的解释都不清楚
1.java appliaction是java中的主要运行程序 ,
public static void main方法
是主要的方法
toString方法
2.是String 方法
init方法
3.这个方法是java applet中的方法,一般用于初始化数据
actionPerfromed方法

4.这个方法是用于接收操作事件的接口

下面的解释都不清楚
1.java appliaction是java中的主要运行程序 ,
public static void main方法
是主要的方法
toString方法
2.是String 方法
init方法
3.这个方法是java applet中的方法,一般用于初始化数据
actionPerfromed方法

4.这个方法是用于接收操作事件的接口

2 回复
发布于 2022-02-15 11:13
含有main方法的类就是主类?
含有main方法的类就是主类?
1 回复
发布于 2017-05-21 11:51
是有定义为 public static void的main方法才是主类
是有定义为 public static void的main方法才是主类
点赞 回复
发布于 2017-11-16 09:58
0
必须在public修饰的类中含有main方法才是主类,没有public的修饰就算有public static void main运行就会提示,找不到主类,抛出异常
必须在public修饰的类中含有main方法才是主类,没有public的修饰就算有public static void main运行就会提示,找不到主类,抛出异常
1 回复
发布于 2018-10-04 11:12
0
一个类的内部可以有多个方法名为main的方法,但是具有public static void main的方法才是主类
一个类的内部可以有多个方法名为main的方法,但是具有public static void main的方法才是主类
点赞 回复
发布于 2022-08-08 20:00
A
A
点赞 回复
发布于 2022-02-13 15:49
主类=main方法
主类=main方法
点赞 回复
发布于 2022-01-09 01:44 来自Android客户端
收起
  • 1
  • 2
  • 3
单选题
数据库
2.

数据库系统相关人员是数据系统的重要组成部分,有三类人员: _________ 、应用程序开发人员和最终用户。


A
数据库管理员
B
程序员
C
高级程序员
D
软件开发商
正确答案:A
你的答案:未作答
官方解析:
数据库系统中的三类主要人员包括数据库管理员(DBA)、应用程序开发人员和最终用户,答案A"数据库管理员"是正确的。

数据库管理员(DBA)是数据库系统中最重要的管理人员,主要负责:
1. 数据库的设计、实现和维护
2. 制定数据库安全策略和访问控制
3. 数据库备份和恢复
4. 性能监控和优化
5. 为其他用户提供技术支持

分析其他选项错误原因:
B "程序员"和C "高级程序员"属于应用程序开发人员的范畴,题目中已经明确提到"应用程序开发人员",所以这两个选项重复且不准确。

D "软件开发商"是一个比较模糊的概念,可能包含多种角色,不能准确对应题目所述的三类人员之一。

这道题目考察了数据库系统中的人员构成,强调了数据库管理员作为专门的数据库管理人员的重要性。
知识点:数据库
题友讨论(1)
1、应用程序员:
负责编写使用数据库的应用程序。这些应用程序可对数据进行检索、建立、删除或修改。
2、用户:
用户利用系统的接口或查询语言访问数据库。
3、数据库管理员(data base administrator,DBA):
负责数据库的总体信息控制。DBA的具体职责包括:具体数据库中的信息内容和结构,决定数据库的存储结构和存取策略,定义数据库的安全性要求和完整性约束条件,监控数据库的使用和运行,负责数据库的性能改进、数据库的重组和重构,以提高系统的性能。
1、应用程序员:
负责编写使用数据库的应用程序。这些应用程序可对数据进行检索、建立、删除或修改。
2、用户:
用户利用系统的接口或查询语言访问数据库。
3、数据库管理员(data base administrator,DBA):
负责数据库的总体信息控制。DBA的具体职责包括:具体数据库中的信息内容和结构,决定数据库的存储结构和存取策略,定义数据库的安全性要求和完整性约束条件,监控数据库的使用和运行,负责数据库的性能改进、数据库的重组和重构,以提高系统的性能。
5 回复
发布于 2018-08-26 15:40
收起
单选题
数据库
3.

数据模型应满足()的要求。

A
真实模拟现实世界
B
容易为人们所理解
C
便于在计算机上实现
D
以上都是
正确答案:D
你的答案:未作答
官方解析:
数据模型的设计是数据库设计中最重要的环节之一,它必须同时满足三个基本要求,因此D选项"以上都是"是正确答案。

具体分析每个选项:

A. 真实模拟现实世界:这是数据模型的基本要求。数据模型必须能够准确反映现实世界中的实体、关系和约束,以确保数据库能够正确存储和管理实际业务数据。

B. 容易为人们所理解:数据模型应该具有良好的可读性和可理解性。这样可以帮助开发人员、管理人员和用户更好地理解系统结构,便于沟通和维护。

C. 便于在计算机上实现:数据模型最终要转换为实际的数据库结构,因此必须考虑计算机的实现效率,确保模型能够被有效地转换为物理存储结构。

这三个要求缺一不可:
- 如果不能真实模拟现实世界,数据库就无法准确反映业务需求
- 如果不容易理解,将增加开发和维护的难度
- 如果难以实现,则会影响系统的性能和可用性

所以D选项"以上都是"最准确地概括了数据模型应满足的要求。一个好的数据模型必须同时满足这三个条件,才能确保数据库系统的实用性和可维护性。
知识点:数据库
题友讨论(2)

答案很明显啊

答案很明显啊

3 回复
发布于 2018-09-29 23:04
选D,数据模型应该满足
  • 真实模拟现实世界
  • 容易为人们所理解
  • 便于在计算机上实现
选D,数据模型应该满足
  • 真实模拟现实世界
  • 容易为人们所理解
  • 便于在计算机上实现
1 回复
发布于 2020-05-06 15:21
收起
单选题
Java
C++
C语言
4.

下面语句正确的是()

A
x+1=5
B
i++=1
C
a++b=1
D
x+=1
正确答案:D
你的答案:未作答
官方解析:
在编程语言中涉及赋值运算和自增运算符的语法规则。D选项"x+=1"是一个合法的复合赋值表达式,它等价于"x=x+1",表示将变量x的值增加1。

分析其他选项的错误原因:

A选项"x+1=5"错误,因为等号左边必须是变量,而不能是表达式。这违反了赋值语句的基本语法规则。

B选项"i++=1"错误,因为i++是一个自增运算表达式,它本身就会使i的值加1,不能作为赋值语句的左值。这是一个非法的语法结构。

C选项"a++b=1"错误,因为a++b不是一个合法的表达式。自增运算符++只能用于单个变量,不能用于连接两个变量。

这个题目主要考察了:
1. 赋值语句的基本语法规则
2. 自增运算符的正确使用方式
3. 复合赋值运算符的概念
4. 表达式作为左值的合法性判断
知识点:C++、Java、C语言
题友讨论(30)
总结一下: 1-首先赋值运算符“=”右值可以是任何常数、变量或者表达式(只要能生成一个值就行)。但左值必须是一个明确的、已命名的变量。 2-常用的双元运算符:+=,-=,*=,/= 解析: A:x+1=5,赋值运算符左边是表达式,不对; B:i++=1,从左到右运算是i=i+1=1,赋值运算符左边是表达式,错误; C:a++b=1,赋值运算符左边为表达式,错误。 D:x+=1,既x=x+1,正确。 注意背一下各个运算符的先后顺序。
总结一下: 1-首先赋值运算符“=”右值可以是任何常数、变量或者表达式(只要能生成一个值就行)。但左值必须是一个明确的、已命名的变量。 2-常用的双元运算符:+=,-=,*=,/= 解析: A:x+1=5,赋值运算符左边是表达式,不对; B:i++=1,从左到右运算是i=i+1=1,赋值运算符左边是表达式,错误; C:a++b=1,赋值运算符左边为表达式,错误。 D:x+=1,既x=x+1,正确。 注意背一下各个运算符的先后顺序。
35 回复
发布于 2019-10-16 02:58
A. The left-hand side of an assignment must be a variable.  赋值运算符左侧必须为变量


A. The left-hand side of an assignment must be a variable.  赋值运算符左侧必须为变量


34 回复
发布于 2018-01-26 15:17
给你补全,不能是表达式
给你补全,不能是表达式
1 回复
发布于 2018-05-10 15:58
0
我去,就见过D,x=x+1
我去,就见过D,x=x+1
13 回复
发布于 2017-06-14 10:32
O(∩_∩)O哈哈~胖虎
O(∩_∩)O哈哈~胖虎
1 回复
发布于 2019-06-19 09:54
0
选D,+=,-=,*=,/=最常见。
ABC都编译错误。
选D,+=,-=,*=,/=最常见。
ABC都编译错误。
6 回复
发布于 2018-06-27 08:51
总能看到你的身影!😂
总能看到你的身影!😂
点赞 回复
发布于 2020-01-18 11:35
0
为啥啊
为啥啊
点赞 回复
发布于 2022-09-28 18:24 湖南 来自Android客户端
0
x+=1等价于x=x+1
x+=1等价于x=x+1
4 回复
发布于 2017-07-03 13:41
x+1=1等价于x=x+1
x+1=1等价于x=x+1
3 回复
发布于 2022-03-21 14:33 来自iOS客户端
赋值运算中左侧应该得为变量
D选项x+=1等同于x=x+1
赋值运算中左侧应该得为变量
D选项x+=1等同于x=x+1
2 回复
发布于 2021-12-21 17:28
右值可以是一个常量,变量,表达式,左值必须是一个已知的变量
右值可以是一个常量,变量,表达式,左值必须是一个已知的变量
2 回复
发布于 2021-09-13 08:35 来自Android客户端
右值可以是任何常数、变量或者表达式(只要能生成一个值就行)。但左值必须是一个明确的、已命名的变量。
所以对于i++ = 1和a++b = 1来说,赋值运算符的左边不是一个变量当然是错误的。
右值可以是任何常数、变量或者表达式(只要能生成一个值就行)。但左值必须是一个明确的、已命名的变量。
所以对于i++ = 1和a++b = 1来说,赋值运算符的左边不是一个变量当然是错误的。
2 回复
发布于 2019-06-02 20:35
mark
mark
点赞 回复
发布于 2023-10-04 14:29 吉林
0
x+=1等价于x=x+1
x+=1等价于x=x+1
1 回复
发布于 2022-10-27 10:08 黑龙江 来自Android客户端
收起
  • 1
  • 2
  • 3
单选题
数据库
5.
关系模型中,一个关键字是 (  )。
A
可由多个任意属性组成
B
至多由一个属性组成
C
可由一个或多个其值能惟一标识该关系模式中任何元组的属性组成
D
以上都不是
正确答案:C
你的答案:未作答
官方解析:
在关系模型中,关键字是能够唯一标识关系中任意元组的属性或属性组合。C选项正确地描述了这一概念 - 关键字可以由一个属性构成(如学号),也可以由多个属性组合构成(如姓名+身份证号的组合),关键是这些属性或属性组合必须能够唯一标识关系中的每一个元组。

分析其他选项错误原因:

A错误:不是任意属性都可以组成关键字,属性或属性组合必须具有唯一标识元组的能力。比如"性别"这样的属性就不能作为关键字,因为它不具备唯一性。

B错误:关键字并非一定要限制为单个属性。在实际应用中,经常需要多个属性组合才能唯一标识一个元组,如"课程号+学号"共同构成选课关系的关键字。

D错误:既不是任意属性组合都可以作为关键字(A的错误),也不是必须限制为单个属性(B的错误),而是要满足能唯一标识元组这一核心要求。

因此,C选项最准确地描述了关系模型中关键字的定义特征。
知识点:数据库
题友讨论(2)
元组可以理解为超码
元组可以理解为超码
8 回复
发布于 2017-11-28 16:24
元组是行
元组是行
1 回复
发布于 2022-03-01 14:27
0
收起
单选题
Java
6.
泛型在Java中应用广泛,那么下列哪个选项不是泛型的作用()
A
泛型会在编译时进行更强大的类型检查转换
B
泛型会消除强制类型转换
C
泛型能够提高代码的复用性
D
泛型不能够提高代码的复用性
正确答案:D
你的答案:未作答
官方解析:
本题考察对泛型知识点的理解。引入泛型的主要作用有3点:1)泛型会在编译时进行更强大的类型检查转换,将错误提前暴露出来;2)泛型会消除强制类型转化;3)泛型能够提高代码的复用性,减少代码的冗余。因此ABC正确。答案D错误,答案选择D
知识点:Java
题友讨论(3)
A:List<String> list=new ArrayList<>(); 泛型会进行检查数据类型,list.add() 如果不是String 类型的话 编译器会进行报错

B:不使用泛型的话
List list=new ArrayList<>();    list.add("hello");
执行 list.get(0)的时候 不能直接给String类型的 因为你没指定泛型 ,编译器不知道数据类型,所以你只能自己进行强制类型转换
String str=(String) list.get(0);

B:使用泛型的话List<String> list=new ArrayList<>();    list.add("hello");
String str=list.get(0); 编译器知道你放进去的数据的类型为String 所以直接能赋值给str;
这样就不需要进行强制类型转换了

C:肯定是提高了代码的复用性了 可以根据不同的参数类型 处理不同的参数;
A:List<String> list=new ArrayList<>(); 泛型会进行检查数据类型,list.add() 如果不是String 类型的话 编译器会进行报错

B:不使用泛型的话
List list=new ArrayList<>();    list.add("hello");
执行 list.get(0)的时候 不能直接给String类型的 因为你没指定泛型 ,编译器不知道数据类型,所以你只能自己进行强制类型转换
String str=(String) list.get(0);

B:使用泛型的话List<String> list=new ArrayList<>();    list.add("hello");
String str=list.get(0); 编译器知道你放进去的数据的类型为String 所以直接能赋值给str;
这样就不需要进行强制类型转换了

C:肯定是提高了代码的复用性了 可以根据不同的参数类型 处理不同的参数;
5 回复
发布于 05-14 21:18 山东
说的不对的地方 大佬们指点一下
说的不对的地方 大佬们指点一下
点赞 回复
发布于 05-14 21:18 山东
0
为什么能提高复用性呢,不理解,泛型限定了类型,如果是其他类型的参数则不能使用此变量
为什么能提高复用性呢,不理解,泛型限定了类型,如果是其他类型的参数则不能使用此变量
点赞 回复
发布于 07-03 09:02 河北 来自Android客户端
收起
单选题
SQL
数据库
7.

下列关于视图说法错误的是?

A

视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据

B

创建视图用CREATE VIEW

C

修改视图用ALTER VIEW

D

删除视图用DELETE VIEW

正确答案:D
你的答案:未作答
官方解析:

由题意得,视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据符合题意,BC也符合视图的语法,而删除视图应该使用DROP VIEW进行,故选D

知识点:数据库、SQL
题友讨论(17)
Drop view
Drop view
15 回复
发布于 2021-12-16 16:31 来自Android客户端
视图就没有删除这一说法,本来就是虚表,咋删除呢
视图就没有删除这一说法,本来就是虚表,咋删除呢
点赞 回复
发布于 2022-02-28 13:51
0
mysql可以使用 DROP VIEW 语句来删除视图。
mysql可以使用 DROP VIEW 语句来删除视图。
10 回复
发布于 2021-12-10 14:51
视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储。单表视图一般用于查询和修改,会改变基本表的数据;多表视图一般用于查询,不会改变基本表的数据。 【例子】:   在一个班级里,作为班主任需要知道全班同学所有课程的成绩,便于全面指导;而数学老师只需要知道全班学生的数学成绩就行了。所以视图的一个重要作用就是区分权限。
视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储。单表视图一般用于查询和修改,会改变基本表的数据;多表视图一般用于查询,不会改变基本表的数据。 【例子】:   在一个班级里,作为班主任需要知道全班同学所有课程的成绩,便于全面指导;而数学老师只需要知道全班学生的数学成绩就行了。所以视图的一个重要作用就是区分权限。
7 回复
发布于 2022-06-13 15:38 来自Android客户端
drop view
drop view
3 回复
发布于 2021-12-13 13:43 来自iOS客户端
删除试图用drop view

删除试图用drop view

2 回复
发布于 2021-12-22 21:06
创建视图 creat view view_name as select column1,column2…from table_name where … 删除视图 drop view view_name 更新视图 update view_name set column1=column1+1 where … 更新视图只能更新基于单个表并且不包含复杂计算(聚合函数,分组,去重)
创建视图 creat view view_name as select column1,column2…from table_name where … 删除视图 drop view view_name 更新视图 update view_name set column1=column1+1 where … 更新视图只能更新基于单个表并且不包含复杂计算(聚合函数,分组,去重)
点赞 回复
发布于 07-02 11:26 北京 来自iOS客户端
drop view 
drop view 
点赞 回复
发布于 03-24 14:50 湖南
删除数据是delete
删除数据是delete
点赞 回复
发布于 2024-08-09 16:46 河北 来自iOS客户端
drop view 修改时alter view
drop view 修改时alter view
点赞 回复
发布于 2024-02-28 05:02 广东 来自Android客户端
视图是虚表,他在存储时只存储视图的定义,而没有存储对应的数据。 删除视图Drop view
视图是虚表,他在存储时只存储视图的定义,而没有存储对应的数据。 删除视图Drop view
点赞 回复
发布于 2024-02-22 20:31 云南 来自Android客户端
收起
  • 1
  • 2
单选题
数据库
8.
在高并发,事物等场景下,MYSQL5.6数据库默认使用哪种存储引擎?
A
Myisam
B
InnoDB
C
Memory
D
ndbCluster
正确答案:B
你的答案:未作答
官方解析:
MySQL 5.6版本默认使用InnoDB作为存储引擎是基于其优秀的事务处理能力和对高并发场景的良好支持。

具体分析如下:

InnoDB的主要优势:
1. 支持ACID事务,确保数据一致性
2. 实现行级锁,提高并发处理能力
3. 支持外键约束,保证数据完整性
4. 具有崩溃恢复能力,数据安全性高
5. 支持缓存池技术,提升读写性能

其他选项分析:

A. MyISAM:
- 不支持事务处理
- 只支持表级锁,并发性能较差
- 不支持外键
- 适合读多写少的场景

C. Memory:
- 数据存储在内存中,重启后数据丢失
- 不支持事务
- 只适合临时表使用
- 表级锁定限制并发能力

D. NDB Cluster:
- 主要用于分布式数据库集群
- 资源消耗大
- 使用场景特殊
- 不适合作为默认存储引擎

因此,InnoDB作为默认存储引擎最适合现代数据库应用场景,特别是在需要事务支持和高并发处理的情况下。
知识点:数据库、前端工程师、2019
题友讨论(10)
MyISAM引擎不支持事务
MyISAM引擎不支持事务
2 回复
发布于 2021-07-24 22:37
B。首先mysql5.5.5开始就将innodb设置为了默认的存储引擎了。而且如果应用需要事务支持, 那么InnoDB(或者XtraDB) 是目前最稳定并且经过验证的选择(行锁了解一下?)。
A选项MyISAM不支持事务哦,亲。
C选项确实适用于高并发,但是其不支持事务。
至于D选项适合高并发,也是事物型的,但是不是默认的哦。



B。首先mysql5.5.5开始就将innodb设置为了默认的存储引擎了。而且如果应用需要事务支持, 那么InnoDB(或者XtraDB) 是目前最稳定并且经过验证的选择(行锁了解一下?)。
A选项MyISAM不支持事务哦,亲。
C选项确实适用于高并发,但是其不支持事务。
至于D选项适合高并发,也是事物型的,但是不是默认的哦。



1 回复
发布于 2022-02-22 22:33

B

B

1 回复
发布于 2019-11-05 08:56
Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB

Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB

19 回复
发布于 2019-11-11 19:05
mysql常用的数据库引擎:innodb 和 XtraDB 
mysql常用的数据库引擎:innodb 和 XtraDB 
6 回复
发布于 2019-07-28 15:18
innodb是行锁,支持高并发
innodb是行锁,支持高并发
2 回复
发布于 2021-03-16 10:22 来自iOS客户端
b
b
点赞 回复
发布于 2021-06-12 19:04 来自iOS客户端
b.
b.
点赞 回复
发布于 2020-08-23 20:11 来自Android客户端
<p>Innodb</p>
<p>Innodb</p>
点赞 回复
发布于 2020-07-23 14:44 来自iOS客户端
B
B
点赞 回复
发布于 2020-06-11 01:10 来自Android客户端
收起
单选题
Java
9.
以下java程序代码,执行后的结果是()
1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args) {   
        Object o = new Object() {  
             public boolean equals(Object obj) {  
                 return true
         }
     };   
     System.out.println(o.equals("Fred"));
     }
}
A
Fred
B
true
C
编译错误
D
运行时抛出异常
正确答案:B
你的答案:未作答
官方解析:
这道题目考察了Java中匿名内部类和方法重写的概念。

代码中创建了一个匿名内部类对象,该类继承自Object类,并重写了equals()方法。在重写的equals()方法中,无论传入什么参数,都返回true。

当执行o.equals("Fred")时,会调用匿名内部类中重写的equals()方法,而不是Object类的原始equals()方法。由于重写的方法始终返回true,所以最终输出结果为true。

分析其他选项:
A错误:程序输出的是布尔值true,而不是字符串"Fred"
C错误:代码可以正常编译,语法没有问题
D错误:程序可以正常运行,不会抛出异常

重点知识点:
1. 匿名内部类可以继承一个类或实现一个接口,并且可以重写父类的方法
2. 方法重写时,子类方法返回值类型、方法名和参数必须与父类相同
3. 通过对象调用方法时,优先调用对象实际类型中的方法(动态绑定)

所以B选项true是正确答案。
知识点:Java、Java工程师、2016、JavaSE
题友讨论(112)
B: 重写了object 的equals 的方法,使他怎么输出都是tue
B: 重写了object 的equals 的方法,使他怎么输出都是tue
105 回复
发布于 2016-02-16 16:57
这个不应该是重载吗?都是object,而且参数都一样,不应该报错吗,求指教
这个不应该是重载吗?都是object,而且参数都一样,不应该报错吗,求指教
4 回复
发布于 2016-08-07 07:56
0
Test默认父类就是Object,所以这是子类覆写父类的equals方法,并不是重载(只在一个类中)!
Test默认父类就是Object,所以这是子类覆写父类的equals方法,并不是重载(只在一个类中)!
6 回复
发布于 2016-08-21 15:52
0
展开9条回复
1、使用了匿名内部类,并重写了Object中的重写了equals()方法
2.o对象调用了equals方法
1、使用了匿名内部类,并重写了Object中的重写了equals()方法
2.o对象调用了equals方法
54 回复
发布于 2015-08-28 10:19
学习了,基础都忘了。
学习了,基础都忘了。
点赞 回复
发布于 2017-11-19 17:51
0
原来函数后面加{}是匿名内部类啊?
原来函数后面加{}是匿名内部类啊?
点赞 回复
发布于 2019-03-15 12:49
0
展开4条回复
public static void main(String[] args) {   
        Object o = new Object() { 
        //重写object的equals().返回值为true.
             public boolean equals(Object obj) {  
                 return true; 
         }
     }; 
     //无论传入什么值都是true。
     System.out.println(o.equals("Fred"));//true
     System.out.println(o.equals(0));//true
     System.out.println(o.equals(null));//true
}

public static void main(String[] args) {   
        Object o = new Object() { 
        //重写object的equals().返回值为true.
             public boolean equals(Object obj) {  
                 return true; 
         }
     }; 
     //无论传入什么值都是true。
     System.out.println(o.equals("Fred"));//true
     System.out.println(o.equals(0));//true
     System.out.println(o.equals(null));//true
}

27 回复
发布于 2016-06-23 11:14
Fred是字符串,也算object类吗
Fred是字符串,也算object类吗
点赞 回复
发布于 2017-02-12 12:16
0
String类,object类的子类
String类,object类的子类
2 回复
发布于 2018-01-10 16:13
0
8 回复
发布于 2016-09-18 23:23
B.
1.建立了一个匿名内部类,并重写了Object的equals方法。
2.通过o调用了equals方法,方法返回true。

B.
1.建立了一个匿名内部类,并重写了Object的equals方法。
2.通过o调用了equals方法,方法返回true。

8 回复
发布于 2015-08-19 17:13
创建Object对象时,重写了equals方法。
创建Object对象时,重写了equals方法。
8 回复
发布于 2015-08-13 15:06
方法可以嵌套吗?
方法可以嵌套吗?
点赞 回复
发布于 2019-08-18 18:40
0
这不算方法嵌套吧
这不算方法嵌套吧
点赞 回复
发布于 2024-11-15 15:30 福建
0
相当于创建了一个方法无论传入什么对象返回都是true   。 我这样理解对吗

相当于创建了一个方法无论传入什么对象返回都是true   。 我这样理解对吗

7 回复
发布于 2015-10-21 21:28
嗯,相当于重写了一个永远返回true的equals()方法
嗯,相当于重写了一个永远返回true的equals()方法
点赞 回复
发布于 2015-12-22 22:50
0
重写不是必须加overwrite,只作用于编译,来检查是否与父类一致,虚拟机并不认识。
重写不是必须加overwrite,只作用于编译,来检查是否与父类一致,虚拟机并不认识。
4 回复
发布于 2021-11-18 07:19 来自Android客户端
这里是匿名内部类继承了Object,重写了Object的equals方法,只要你重写了Object方法那么无论***equals(&&&);都是会返回true的
这里是匿名内部类继承了Object,重写了Object的equals方法,只要你重写了Object方法那么无论***equals(&&&);都是会返回true的
4 回复
发布于 2017-01-13 14:48
Object o = newObject() {  
             publicbooleanequals(Object obj) {  
                 returntrue; 
         }
这里使用的是匿名内部类,定义类的同时,创建了一个对象o,不会报错的
重写了equals方法,一直返回true;
Object o = newObject() {  
             publicbooleanequals(Object obj) {  
                 returntrue; 
         }
这里使用的是匿名内部类,定义类的同时,创建了一个对象o,不会报错的
重写了equals方法,一直返回true;
3 回复
发布于 2018-05-30 15:51
收起
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
单选题
Java
10.
在java7中,下列不能做switch()的参数类型是?
A
int型
B
枚举类型
C
字符串
D
浮点型
正确答案:D
你的答案:未作答
官方解析:
在Java 7中,switch语句参数类型支持了包括int、byte、short、char、枚举类型以及String(Java 7新增特性)在内的多种类型,但不支持浮点型(float和double)。因此D选项是正确答案。

浮点型不能作为switch参数的主要原因是浮点数存在精度问题。由于浮点数的存储特点,即使是看似相等的浮点数,在二进制层面可能也会有细微差异,这与switch语句要求的精确匹配特性不相符。

分析其他选项:
A正确: int型是switch语句最基本和最常用的参数类型。
B正确: 枚举类型(enum)从Java 5开始就支持作为switch参数。
C正确: String类型是Java 7新增的一个重要特性,可以作为switch参数。

总结来说,switch语句要求参数类型必须是能够进行精确值比较的类型。整数类型、字符类型、枚举类型和字符串类型都满足这个要求,而浮点型因为存在精度问题,所以不能作为switch语句的参数。
知识点:Java、JavaSE
题友讨论(150)
switch支持 int及以下(char, short, byte),String, Enum
switch支持 int及以下(char, short, byte),String, Enum
203 回复
发布于 2015-11-13 10:53
这个好记
这个好记
2 回复
发布于 2017-09-08 14:09
0
这个好记,前面的说一大堆
这个好记,前面的说一大堆
3 回复
发布于 2018-08-07 09:52
0
展开7条回复
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long、float、double类型不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
注意:String类型是Java7开始支持的。
在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long、float、double类型不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
注意:String类型是Java7开始支持的。
87 回复
发布于 2015-08-11 08:59
点赞 回复
发布于 2016-05-18 10:11
0
long整数类型也可以呀
long整数类型也可以呀
点赞 回复
发布于 2016-09-18 19:02
0
展开1条回复
switch支持byte、short、char、int、String(jdk1.7)、Enum
switch支持byte、short、char、int、String(jdk1.7)、Enum
35 回复
发布于 2018-09-02 08:33
jdk17.的流的异常处理可以没catch吗?
jdk17.的流的异常处理可以没catch吗?
点赞 回复
发布于 2022-08-14 11:31
0
竟然真的能遇到大佬
竟然真的能遇到大佬
点赞 回复
发布于 2022-08-26 10:25 广东 来自iOS客户端
0
本人eclipse测试过,switch支持:①支持小于等于int的类型譬如(byte,short,char,int),不支持八大基础数据类型中的boolean,long,float,double②支持枚举类型③支持String类型(java7开始支持)
本人eclipse测试过,switch支持:①支持小于等于int的类型譬如(byte,short,char,int),不支持八大基础数据类型中的boolean,long,float,double②支持枚举类型③支持String类型(java7开始支持)
32 回复
发布于 2017-08-14 21:15
在JDK1.5之前,switch循环只支持byte short char int四种数据类型.

JDK1.5 在switch循环中增加了枚举类与byte short char int的包装类,对四个包装类的支持是因为java编译器在底层手动进行拆箱,而对枚举类的支持是因为枚举类有一个ordinal方法,该方法实际上是一个int类型的数值.

jdk1.7开始支持String类型,但实际上String类型有一个hashCode算法,结果也是int类型.而byte short char类型可以在不损失精度的情况下向上转型成int类型.所以总的来说,可以认为switch中只支持int.
在JDK1.5之前,switch循环只支持byte short char int四种数据类型.

JDK1.5 在switch循环中增加了枚举类与byte short char int的包装类,对四个包装类的支持是因为java编译器在底层手动进行拆箱,而对枚举类的支持是因为枚举类有一个ordinal方法,该方法实际上是一个int类型的数值.

jdk1.7开始支持String类型,但实际上String类型有一个hashCode算法,结果也是int类型.而byte short char类型可以在不损失精度的情况下向上转型成int类型.所以总的来说,可以认为switch中只支持int.
11 回复
发布于 2019-11-13 21:06
除了整型,枚举类型,字符型,其他的都不行。譬如:字符串,浮点型这些都不可以作为switch的参数类型。
除了整型,枚举类型,字符型,其他的都不行。譬如:字符串,浮点型这些都不可以作为switch的参数类型。
10 回复
发布于 2014-10-25 00:25
字符串是可以的
字符串是可以的
点赞 回复
发布于 2022-05-05 11:04 来自Android客户端
0
C是可以的  从Java7开始 switch可以是string类型
C是可以的  从Java7开始 switch可以是string类型
6 回复
发布于 2015-05-11 19:03
我以为是8才有的string😂
我以为是8才有的string😂
点赞 回复
发布于 2022-03-02 20:27 来自Android客户端
0
受教了
受教了
点赞 回复
发布于 2022-03-13 19:46 来自Android客户端
0
jdk1.7 以后含1.7 ,有 int byte char short及其包装类型 和 enum类型, String类型是在 1.7 新增的
jdk1.7 以后含1.7 ,有 int byte char short及其包装类型 和 enum类型, String类型是在 1.7 新增的
5 回复
发布于 2017-06-06 23:33
说个拓展小知识,switch实际上只支持整型,string在switch底层其实是调用了hashcode方法来获得整型来判断的,enum是调用是序号方法获得的整型,所以如果传一个null字符串进switch会报空指针异常
说个拓展小知识,switch实际上只支持整型,string在switch底层其实是调用了hashcode方法来获得整型来判断的,enum是调用是序号方法获得的整型,所以如果传一个null字符串进switch会报空指针异常
3 回复
发布于 2021-10-06 16:00 来自iOS客户端
答案:D switch支持的数据类型有byte,short,int,char,枚举,在JDK1.7支持String类型。 这里的整型很容易让我们误以为包括字节(byte),短整型(short),整型(int),长整型(long)。这里指的是整型int。
答案:D switch支持的数据类型有byte,short,int,char,枚举,在JDK1.7支持String类型。 这里的整型很容易让我们误以为包括字节(byte),短整型(short),整型(int),长整型(long)。这里指的是整型int。
3 回复
发布于 2017-08-28 15:12
我就是误解了
我就是误解了
点赞 回复
发布于 2018-01-30 23:03
0
收起
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 10
单选题
Java
11.
下面不属于Object类中方法的是:
A
hashCode()
B
finally()
C
wait()
D
toString()
正确答案:B
你的答案:未作答
官方解析:
Object类是所有Java类的根类,而finally()并不是Object类的方法,它是一个异常处理关键字,用于定义一定会被执行的代码块。所以B选项是正确答案。

分析其他选项:
A. hashCode()是Object类的一个重要方法,用于返回对象的哈希码值,该方法常用于哈希表等数据结构中。

C. wait()是Object类的一个本地方法,用于线程间通信,使当前线程进入等待状态,直到其他线程调用notify()或notifyAll()方法。

D. toString()是Object类中最常用的方法之一,用于返回对象的字符串表示形式,默认返回"类名@十六进制哈希码"格式的字符串。

Object类的常用方法还包括:
- equals(): 比较两个对象是否相等
- clone(): 创建并返回当前对象的副本
- notify()/notifyAll(): 唤醒等待当前对象监视器的一个/所有线程
- getClass(): 返回对象的运行时类

所以finally()作为异常处理的关键字,明显不属于Object类的方法范畴。
知识点:Java、Java工程师、C++工程师、2016、JavaSE
题友讨论(69)

9大方法

package  java.lang;   
public   class  Object {   

/* 一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用。*/     
private   static   native   void  registerNatives();   
/* 对象初始化时自动调用此方法*/   
static  {   
registerNatives();   
}   
/* 返回此 Object 的运行时类。*/   
public   final   native  Class<?> getClass();   

/*   
hashCode 的常规协定是:(本质 上是 返回该对象的哈希码值。 )

1.在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。    
2.如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。    
3.如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。   
*/   

public   native   int  hashCode();   


public   boolean  equals(Object obj) {   
return  ( this  == obj);   
}   

/*本地CLONE方法,用于对象的复制。*/   
protected   native  Object clone()  throws  CloneNotSupportedException;   

/*返回该对象的字符串表示。非常重要的方法*/   
public  String toString() {   
return  getClass().getName() +  "@"  + Integer.toHexString(hashCode());   
}   

/*唤醒在此对象监视器上等待的单个线程。*/   
public   final   native   void  notify();   

/*唤醒在此对象监视器上等待的所有线程。*/   
public   final   native   void  notifyAll();   


/*在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。    
当前线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。*/   
public   final   void  wait()  throws  InterruptedException {   
wait( 0 );   
}   



/*在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。*/   
public   final   native   void  wait( long  timeout)  throws  InterruptedException;   

/* 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。*/   
public   final   void  wait( long  timeout,  int  nanos)  throws  InterruptedException {   
if  (timeout <  0 ) {   
throw   new  IllegalArgumentException( "timeout value is negative" );   
}   

if  (nanos <  0  || nanos >  999999 ) {   
throw   new  IllegalArgumentException(   
"nanosecond timeout value out of range" );   
}   

if  (nanos >=  500000  || (nanos !=  0  && timeout ==  0 )) {   
timeout++;   
}   

wait(timeout);   
}   

/*当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。*/   
protected   void  finalize()  throws  Throwable { }   
}

9大方法

package  java.lang;   
public   class  Object {   

/* 一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用。*/     
private   static   native   void  registerNatives();   
/* 对象初始化时自动调用此方法*/   
static  {   
registerNatives();   
}   
/* 返回此 Object 的运行时类。*/   
public   final   native  Class<?> getClass();   

/*   
hashCode 的常规协定是:(本质 上是 返回该对象的哈希码值。 )

1.在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。    
2.如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。    
3.如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。   
*/   

public   native   int  hashCode();   


public   boolean  equals(Object obj) {   
return  ( this  == obj);   
}   

/*本地CLONE方法,用于对象的复制。*/   
protected   native  Object clone()  throws  CloneNotSupportedException;   

/*返回该对象的字符串表示。非常重要的方法*/   
public  String toString() {   
return  getClass().getName() +  "@"  + Integer.toHexString(hashCode());   
}   

/*唤醒在此对象监视器上等待的单个线程。*/   
public   final   native   void  notify();   

/*唤醒在此对象监视器上等待的所有线程。*/   
public   final   native   void  notifyAll();   


/*在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。    
当前线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。*/   
public   final   void  wait()  throws  InterruptedException {   
wait( 0 );   
}   



/*在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。*/   
public   final   native   void  wait( long  timeout)  throws  InterruptedException;   

/* 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。*/   
public   final   void  wait( long  timeout,  int  nanos)  throws  InterruptedException {   
if  (timeout <  0 ) {   
throw   new  IllegalArgumentException( "timeout value is negative" );   
}   

if  (nanos <  0  || nanos >  999999 ) {   
throw   new  IllegalArgumentException(   
"nanosecond timeout value out of range" );   
}   

if  (nanos >=  500000  || (nanos !=  0  && timeout ==  0 )) {   
timeout++;   
}   

wait(timeout);   
}   

/*当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。*/   
protected   void  finalize()  throws  Throwable { }   
}
点赞 回复
发布于 2017-07-07 21:44
点赞 回复
发布于 2016-08-24 14:59
这是什么软件?这么酷
这是什么软件?这么酷
点赞 回复
发布于 2016-08-24 23:41
0
Intel idea?
Intel idea?
点赞 回复
发布于 2016-09-11 22:47
0
展开2条回复
B finally() finalize()是Object的方法 尔而finally不是
B finally() finalize()是Object的方法 尔而finally不是
点赞 回复
发布于 2015-10-18 11:23
这个故事告诉我们英语学得好题目做得好。方法一般都是动词或者动宾结构,finally显然不对应该是finalize
这个故事告诉我们英语学得好题目做得好。方法一般都是动词或者动宾结构,finally显然不对应该是finalize
190 回复
发布于 2017-05-21 14:14
服了
服了
点赞 回复
发布于 2017-07-15 18:06
0
兄弟666
兄弟666
点赞 回复
发布于 2017-10-10 19:51
0
展开18条回复
下图
下图
104 回复
发布于 2016-04-18 10:51
66666
66666
点赞 回复
发布于 2016-07-06 23:09
0
还要加上finalize()和clone()方法吧,一共有11个吧
还要加上finalize()和clone()方法吧,一共有11个吧
点赞 回复
发布于 2016-07-30 09:26
0
展开8条回复
finalize()才是object方法,放在程序末尾,垃圾回收器运行到此程序时,执行此方法,通过重载此方法,可以在进行内存回收时实现其它功能,比如关闭文件等
finalize()才是object方法,放在程序末尾,垃圾回收器运行到此程序时,执行此方法,通过重载此方法,可以在进行内存回收时实现其它功能,比如关闭文件等
34 回复
发布于 2015-11-18 11:56
我怎么感觉这个回答比第一个有意思
我怎么感觉这个回答比第一个有意思
点赞 回复
发布于 2017-12-15 12:19
0
最好不要指望它回收,老老实实finally
最好不要指望它回收,老老实实finally
点赞 回复
发布于 2018-03-07 00:33
0
展开1条回复
9 回复
发布于 2016-07-20 15:29
我想请问一下,你的这张图是在哪照的呀
我想请问一下,你的这张图是在哪照的呀
点赞 回复
发布于 2017-10-13 22:26
0
帮助文档
帮助文档
点赞 回复
发布于 2017-10-31 22:45
0
遇到过好几个这样的题目了,基本上都是选finally()
附:
遇到过好几个这样的题目了,基本上都是选finally()
附:
3 回复
发布于 2017-03-30 10:57
请问一下,你这张图是在哪照的呀
请问一下,你这张图是在哪照的呀
点赞 回复
发布于 2017-10-13 22:27
0
看图的话好像是个中文版的API,建议别找了,多看英文的吧。😂 当初年轻不懂事
看图的话好像是个中文版的API,建议别找了,多看英文的吧。😂 当初年轻不懂事
点赞 回复
发布于 2017-10-13 23:13
0
展开1条回复
Obeject共11个方法9个public方法和2个protect方法
equals(),hashcode(),toString(),getClass(),三个wait(),一个notify(),一个notifyAll()都是public方法
clone()和finalize()两个方法是protect方法

Obeject共11个方法9个public方法和2个protect方法
equals(),hashcode(),toString(),getClass(),三个wait(),一个notify(),一个notifyAll()都是public方法
clone()和finalize()两个方法是protect方法

2 回复
发布于 2018-09-14 20:12
点赞 回复
发布于 2017-09-07 18:39
请问一下,你这张图是在哪照的呀
请问一下,你这张图是在哪照的呀
点赞 回复
发布于 2017-10-13 22:27
0
这个应该是API
这个应该是API
点赞 回复
发布于 2019-04-23 13:23
0
展开1条回复
收起
  • 1
  • 2
  • 3
单选题
数据库
12.

数据库三级模式体系结构的划分,有利于保持数据库的 (  )。

A
数据独立性
B
数据安全性
C
结构规范化
D
操作可行性
正确答案:A
你的答案:未作答
官方解析:
数据库三级模式体系结构包括外模式、概念模式和内模式,这种分层设计的主要目的就是实现数据独立性。因此A选项是正确的。

数据独立性包括物理独立性和逻辑独立性:
- 物理独立性:内模式发生改变时,概念模式不需要改变
- 逻辑独立性:概念模式发生改变时,外模式不需要改变

分析其他选项:
B选项错误:数据安全性主要依赖于数据库的安全机制和访问控制,与三级模式的划分关系不大。

C选项错误:结构规范化是针对数据库设计过程中的范式理论,主要用于减少数据冗余和异常,与三级模式划分无直接关系。

D选项错误:操作可行性是指数据库操作的便利程度,这更多依赖于数据库管理系统的功能设计,而不是三级模式的划分。

所以三级模式最重要的贡献是实现了数据独立性,使得数据库具有更好的可维护性和扩展性。
知识点:数据库、C++工程师
题友讨论(5)
22 回复
发布于 2018-09-26 23:13
数据库领域公认的标准结构是三级模式结构,它包括外模式、概念模式、内模式,有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性。
数据库领域公认的标准结构是三级模式结构,它包括外模式、概念模式、内模式,有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性。
6 回复
发布于 2017-05-15 20:45
三级模式数据独立性,外模逻辑,内模物理
三级模式数据独立性,外模逻辑,内模物理
4 回复
发布于 2021-05-29 00:40 来自Android客户端
数据库三级模式体系结构的划分,有利于保持数据库的数据独立性
数据库三级模式体系结构的划分,有利于保持数据库的数据独立性
2 回复
发布于 2019-07-08 17:59
  1. 外部模式(External Schema)

    • 外部模式也称为用户模式或视图模式,是最接近用户的数据视图层次。外部模式定义了用户如何看到数据,包括了用户可以看到和使用的数据的逻辑结构和数据的存取方式。
    • 外部模式通过视图(View)来描述用户的数据需求,隐藏了数据库中不需要用户了解的复杂性,使用户能够按照自己的需求方便地进行数据访问和操作。
  2. 概念模式(Conceptual Schema)

    • 概念模式也称为全局模式,是数据库的逻辑结构描述,定义了数据库中所有数据的总体逻辑结构和关系。它是所有用户的公共数据视图,反映了数据库的整体逻辑结构和数据之间的关系。
    • 概念模式定义了数据库中的所有数据对象、它们的属性及其之间的联系,但不涉及具体的存储细节或物理实现。
  3. 内部模式(Internal Schema)

    • 内部模式也称为存储模式,是数据库的物理结构描述,定义了数据在物理存储设备上的存储方式和组织形式。内部模式描述了数据在存储介质上的表示方式、存储结构、存取路径等详细信息。
    • 内部模式与具体的存储技术和物理结构密切相关,通常由数据库管理系统(DBMS)管理和控制,对用户来说是透明的。
  1. 外部模式(External Schema)

    • 外部模式也称为用户模式或视图模式,是最接近用户的数据视图层次。外部模式定义了用户如何看到数据,包括了用户可以看到和使用的数据的逻辑结构和数据的存取方式。
    • 外部模式通过视图(View)来描述用户的数据需求,隐藏了数据库中不需要用户了解的复杂性,使用户能够按照自己的需求方便地进行数据访问和操作。
  2. 概念模式(Conceptual Schema)

    • 概念模式也称为全局模式,是数据库的逻辑结构描述,定义了数据库中所有数据的总体逻辑结构和关系。它是所有用户的公共数据视图,反映了数据库的整体逻辑结构和数据之间的关系。
    • 概念模式定义了数据库中的所有数据对象、它们的属性及其之间的联系,但不涉及具体的存储细节或物理实现。
  3. 内部模式(Internal Schema)

    • 内部模式也称为存储模式,是数据库的物理结构描述,定义了数据在物理存储设备上的存储方式和组织形式。内部模式描述了数据在存储介质上的表示方式、存储结构、存取路径等详细信息。
    • 内部模式与具体的存储技术和物理结构密切相关,通常由数据库管理系统(DBMS)管理和控制,对用户来说是透明的。
点赞 回复
发布于 2024-07-26 22:35 广东
收起
单选题
数据库
13.

在DBS中,负责定义DB结构以及完整性定义、安全授权等工作的用户是( )

A
应用程序员
B
数据库设计人员
C
数据库管理员
D
终端用户
正确答案:C
你的答案:未作答
官方解析:
在数据库系统(DBS)中,数据库管理员(DBA)是负责定义数据库结构、完整性约束和安全授权等核心管理工作的关键角色。DBA拥有最高级别的权限,能够执行数据库的创建、修改、删除等操作,并管理其他用户的访问权限。

分析其他选项:
A. 应用程序员:主要负责开发基于数据库的应用程序,使用SQL语句访问和操作数据,但不具备数据库结构定义和安全管理的权限。

B. 数据库设计人员:主要负责数据库的概念设计和逻辑设计,制定数据模型,但不直接参与数据库的日常管理和维护工作。

D. 终端用户:是数据库的普通使用者,只能在被授权的范围内查询和操作数据,没有管理数据库结构和安全的权限。

综上所述,数据库管理员(DBA)是唯一有权限和职责执行数据库结构定义、完整性约束设置和安全授权等管理工作的角色。
知识点:数据库
题友讨论(5)
在dbs中,负责定义db结构以及完整性定义,安全授权等工作的是数据库管理员
在dbs中,负责定义db结构以及完整性定义,安全授权等工作的是数据库管理员
1 回复
发布于 2024-02-21 20:37 广东 来自Android客户端
DBS 数据库系统
DBS 数据库系统
点赞 回复
发布于 2022-08-28 05:55 辽宁 来自Android客户端
C
C
点赞 回复
发布于 2021-03-29 19:29 来自Android客户端
C
C
点赞 回复
发布于 2018-05-24 21:43
收起
单选题
Java
14.

一个文件中的数据要在控制台上显示,首先需要( )。

A
System.out.print (buffer[i]);
B
FileOutputStream fout = new FileOutputStream(this.filename);
C
FileInputStream fin = new FileInputStream(this.filename);。
D
System.in.read(buffer)。
正确答案:C
你的答案:未作答
官方解析:
要在控制台显示文件中的数据,首先需要使用FileInputStream来读取文件内容,因此C选项是正确的。FileInputStream类是Java IO包中用于从文件中读取字节流的基础类。

分析各选项:
A选项 System.out.print(buffer[i]) 是输出缓冲区内容的语句,这是显示数据的最后一步,而不是首要步骤。

B选项 FileOutputStream 是用于向文件写入数据的类,与从文件读取数据的需求相反。

C选项 FileInputStream 是正确的,因为:
1. 它是读取文件数据的基础类
2. 必须先建立文件输入流才能读取数据
3. 这是文件数据显示过程的第一步

D选项 System.in.read(buffer) 是从标准输入(键盘)读取数据的方法,而不是从文件读取数据的方法。

完整的文件显示过程应该是:
1. 创建FileInputStream对象
2. 读取文件数据到缓冲区
3. 使用System.out.print输出数据
因此初始步骤必须是建立FileInputStream。
知识点:Java
题友讨论(79)

一个文件中的数据要在控制台显示,首先需要获取文件中的内容,使用FileInputStream fin = new FileInputStream(this.filename);

一个文件中的数据要在控制台显示,首先需要获取文件中的内容,使用FileInputStream fin = new FileInputStream(this.filename);

91 回复
发布于 2017-05-15 15:12
我的神,把FileInputStream和FileOnputStream弄反了
我的神,把FileInputStream和FileOnputStream弄反了
6 回复
发布于 2018-04-22 19:01
0
建议你可以看下API文档
建议你可以看下API文档
点赞 回复
发布于 2018-07-05 11:16
0
展开4条回复
说下我的理解, out和in从程序的角度看,out是从程序里出去的数据,in是进入到程序的数据。 这是对FileOutputStream和FileInputStream的区分记忆。
说下我的理解, out和in从程序的角度看,out是从程序里出去的数据,in是进入到程序的数据。 这是对FileOutputStream和FileInputStream的区分记忆。
86 回复
发布于 2018-01-12 13:43
牛逼
牛逼
点赞 回复
发布于 2021-01-29 09:28
0
这样记最科学
这样记最科学
点赞 回复
发布于 2021-04-14 12:34 来自Android客户端
0
展开4条回复
然而Java7后可以一行读取了
//Java7
System.out.println(new String(Files.readAllBytes(Paths.get("D:\\jd.txt"))));
//Java8
  List<String> lines = Files.readAllLines(Paths.get("D:\\jd.txt"), StandardCharsets.UTF_8);

而且都是自动关闭流的

然而Java7后可以一行读取了
//Java7
System.out.println(new String(Files.readAllBytes(Paths.get("D:\\jd.txt"))));
//Java8
  List<String> lines = Files.readAllLines(Paths.get("D:\\jd.txt"), StandardCharsets.UTF_8);

而且都是自动关闭流的

79 回复
发布于 2017-09-12 23:56
1 回复
发布于 2018-09-05 00:58
0
new Be
new Be
1 回复
发布于 2019-02-17 18:37
0
展开2条回复
要输出首先要读入,所以先Input
要输出首先要读入,所以先Input
33 回复
发布于 2017-06-20 21:57
本题考查的知识点是:字节流
    1:创建File对象  File file = new File("URL)
    2:创建FileInputStrream对象 FileInputStrream in = new FileInputStrream(file); 读取文件的数据到控制台

本题考查的知识点是:字节流
    1:创建File对象  File file = new File("URL)
    2:创建FileInputStrream对象 FileInputStrream in = new FileInputStrream(file); 读取文件的数据到控制台

15 回复
发布于 2017-05-16 12:25
inputStream是读取出文件内容 outputStream是向文件写入内容
inputStream是读取出文件内容 outputStream是向文件写入内容
6 回复
发布于 2020-07-10 09:05 来自Android客户端
in---read 读取 out---write 写入
in---read 读取 out---write 写入
点赞 回复
发布于 2021-05-27 19:22
0
要输出到控制台,首选得读取文件,读取那就是要input,所以是fileInputStream
要输出到控制台,首选得读取文件,读取那就是要input,所以是fileInputStream
5 回复
发布于 2021-07-02 22:06 来自iOS客户端
这是输入输出流的一个概念,我们要将文件里的内容输出到控制台,事实上是分为两步。第一将文件内容读入内存(in),第二步将内容从内存里写出到控制台。这道题的答案就是第一步的内容,文件输入流。
这是输入输出流的一个概念,我们要将文件里的内容输出到控制台,事实上是分为两步。第一将文件内容读入内存(in),第二步将内容从内存里写出到控制台。这道题的答案就是第一步的内容,文件输入流。
3 回复
发布于 2020-12-05 15:00
要在控制台上输出内容,首先应该将要显示的内容读入
要在控制台上输出内容,首先应该将要显示的内容读入
3 回复
发布于 2017-07-07 19:06
对于程序而言,读取文件内容,就是in,输出内容到文件,就是out
对于程序而言,读取文件内容,就是in,输出内容到文件,就是out
2 回复
发布于 2022-04-15 14:56
收起
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
单选题
数据库
15.

E-R图中,实体用( )符号表示。

A
椭圆
B
矩形
C
菱形
D
三角形
正确答案:B
你的答案:未作答
官方解析:
E-R图是实体关系图(Entity-Relationship Diagram),用于数据库概念设计,其中使用矩形(方框)来表示实体。这是E-R图的基本符号规范之一。

分析其他选项:

A错误:椭圆形在E-R图中用来表示实体的属性(Attribute)。

B正确:矩形用来表示实体(Entity),这是E-R模型的标准符号。实体是现实世界中可区别于其他对象的事物,在E-R图中用矩形表示最为直观。

C错误:菱形在E-R图中用来表示实体之间的关系(Relationship)。

D错误:三角形不是E-R图的标准符号,在E-R图中没有使用三角形来表示任何概念。

补充说明:在E-R图中,不同的图形符号代表不同的含义:
- 矩形表示实体
- 椭圆表示属性
- 菱形表示关系
这些符号的使用是数据库设计中的国际通用标准。
知识点:数据库
题友讨论(5)
在ER图中有如下四个成分: 矩形框:表示实体,在框中记入实体名。 菱形框:表示联系,在框中记***系名。 椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。 连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)
在ER图中有如下四个成分: 矩形框:表示实体,在框中记入实体名。 菱形框:表示联系,在框中记***系名。 椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。 连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)
1 回复
发布于 2019-03-13 08:09
矩阵表示实体 菱形表示联系
矩阵表示实体 菱形表示联系
1 回复
发布于 2019-06-14 09:18
在ER图中有如下四个成分:
矩形框:表示实体,在框中记入实体名。
菱形框:表示联系,在框中记***系名。
椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)
在ER图中有如下四个成分:
矩形框:表示实体,在框中记入实体名。
菱形框:表示联系,在框中记***系名。
椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)
11 回复
发布于 2017-07-31 17:01
答案:B

(摘自百度百科)补充:
例图:
E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
    在ER图中有如下四个成分:
    
        矩形框:表示实体,在框中记入实体名。
        菱形框:表示联系,在框中记***系名。
        椭圆形框:表示实体或联系属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
        连线:实体与属性之间、实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)
答案:B

(摘自百度百科)补充:
例图:
E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
    在ER图中有如下四个成分:
    
        矩形框:表示实体,在框中记入实体名。
        菱形框:表示联系,在框中记***系名。
        椭圆形框:表示实体或联系属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
        连线:实体与属性之间、实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)
3 回复
发布于 2022-02-08 13:00
三角形表示什么?大佬们
三角形表示什么?大佬们
点赞 回复
发布于 2023-04-05 16:35 福建
收起
单选题
数据库
16.

数据库的() 是指数据的正确性和相容性。

A
安全性
B
完整性
C
并发控制
D
恢复
正确答案:B
你的答案:未作答
官方解析:
数据库完整性是指保证数据的正确性、有效性和相容性的一组规则和约束条件,B选项完全符合题目所述。完整性是数据库的一个重要特性,用于维护数据的一致性和可靠性。

分析其他选项:

A错误:安全性是指保护数据库防止未经授权的访问和非法使用,主要涉及访问控制和权限管理,而不是数据的正确性。

C错误:并发控制是指在多用户环境下协调对数据库的并发访问,确保数据的一致性,主要解决并发访问冲突问题。

D错误:恢复是指在系统故障时将数据库恢复到某个正确状态的机制,主要处理系统失效和事务回滚等问题。

更详细地说,数据库完整性包括:
- 实体完整性:确保表的主键唯一且非空
- 参照完整性:确保表之间引用关系的正确性
- 用户定义完整性:符合用户定义的业务规则和约束条件

这些完整性规则共同保证了数据的正确性和相容性。
知识点:数据库
题友讨论(4)
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。
数据库完整性(DatabaseIntegrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。
数据库完整性(DatabaseIntegrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。
29 回复
发布于 2018-07-09 14:52
完整性 包括 一致性 正确性 有效性 相容性
完整性 包括 一致性 正确性 有效性 相容性
4 回复
发布于 2022-03-07 20:22 来自Android客户端
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。 数据库完整性(DatabaseIntegrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。 数据库完整性(DatabaseIntegrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。
点赞 回复
发布于 2024-03-26 00:17 辽宁 来自Android客户端
数据库完整性(DatabaseIntegrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。
数据库完整性(DatabaseIntegrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。
点赞 回复
发布于 2023-10-21 01:43 安徽 来自Android客户端
收起
单选题
SQL
数据库
17.
Mysql中表student_table(id,name,birth,sex),插入如下记录:
('1001' , '' , '2000-01-01' , '男');
('1002' , null , '2000-12-21' , '男');
('1003' , NULL , '2000-05-20' , '男');
('1004' , '张三' , '2000-08-06' , '男');
('1005' , '李四' , '2001-12-01' , '女');
查询2001年及之后出生的男生、女生总数,正确的SQL是()?
A
select sex,count(*) from student_table group by sex where birth >='2001' ;
B
select count(*) from student_table where birth >='2001' group by sex ;
C
select sex,count(*) from student_table where birth >='2001' group by sex ;
D
select sex,count(*) from student_table group by sex having birth >='2001' ;
正确答案:C
你的答案:未作答
官方解析:
题目是求【男生、女生总数】所以需要先写出sex,count(*),所以B错误;
2001年及之后出生的】是先卡条件再计数,所以需要用where先卡条件,where是写在group by前面,所以A错误;
having是对计数后的结果做条件判断,所以D语义错误并且执行时也会报错;
C是正确选项。
知识点:数据库、SQL
题友讨论(31)
D报错:having子句是对聚合结果指定条件,聚合结果里根本没有birth这一列,因此having只能对以下两种情况指定条件:(1)聚合键(2)聚合函数
D报错:having子句是对聚合结果指定条件,聚合结果里根本没有birth这一列,因此having只能对以下两种情况指定条件:(1)聚合键(2)聚合函数
66 回复
发布于 2022-01-19 17:46
mark
mark
点赞 回复
发布于 2022-06-27 14:18
0
Mark
Mark
点赞 回复
发布于 2023-04-02 11:26 湖南 来自iOS客户端
0
展开10条回复
having 啥 就得 select啥
having 啥 就得 select啥
45 回复
发布于 2022-03-09 18:48
为啥不是D啊
为啥不是D啊
9 回复
发布于 2021-12-10 21:09 来自Android客户端
我也想问为什么不是D🤨
我也想问为什么不是D🤨
点赞 回复
发布于 2021-12-14 16:06 来自Android客户端
0
因为要在group by之前先算出2001及其以上的数目。where是先于group by运算的语句。
因为要在group by之前先算出2001及其以上的数目。where是先于group by运算的语句。
1 回复
发布于 2021-12-17 23:35
0
展开2条回复
本来having设计的就是对分组后的数据进行过滤,所以having 后面只能跟聚合函数或分组的字段
本来having设计的就是对分组后的数据进行过滤,所以having 后面只能跟聚合函数或分组的字段
6 回复
发布于 2022-05-25 18:32 来自iOS客户端
Select后面的字段列表里没有出现的字段,having中不能使用
Select后面的字段列表里没有出现的字段,having中不能使用
2 回复
发布于 2023-01-17 16:56 河南 来自iOS客户端
having只能跟聚合函数或分组的字段,having啥需要select啥
having只能跟聚合函数或分组的字段,having啥需要select啥
1 回复
发布于 2022-09-20 08:23 北京 来自Android客户端
group by需要先选中sex
group by需要先选中sex
1 回复
发布于 2022-02-21 17:58 来自iOS客户端
还以为是选出男生加女生的总数,不能选B
还以为是选出男生加女生的总数,不能选B
点赞 回复
发布于 2024-09-13 20:31 重庆 来自Android客户端
今天才知道 WHERE 放在 GROUP BY 后面会报错
今天才知道 WHERE 放在 GROUP BY 后面会报错
点赞 回复
发布于 2024-08-15 16:06 安徽
having是对计数后的结果做条件判断,所以要先where做操作
having是对计数后的结果做条件判断,所以要先where做操作
点赞 回复
发布于 2024-02-28 04:21 广东 来自Android客户端
收起
  • 1
  • 2
单选题
Java
18.
建立Statement对象的作用是?
A
连接数据库
B
声明数据库
C
执行SQL语句
D
保存查询结果
正确答案:C
你的答案:未作答
官方解析:
Statement对象是Java JDBC中用于执行SQL语句的核心接口,其主要作用就是执行SQL语句并返回结果。它提供了executeQuery()、executeUpdate()等方法来执行不同类型的SQL语句。所以C选项"执行SQL语句"是正确答案。

分析其他选项:
A错误:"连接数据库"是Connection对象的作用,而不是Statement对象的功能。Connection负责建立与数据库的连接。

B错误:"声明数据库"这个说法不准确。数据库的创建是通过CREATE DATABASE语句实现的,而Statement只是执行这条SQL语句的工具。

D错误:"保存查询结果"是ResultSet对象的职责。当执行查询语句后,查询结果会存储在ResultSet对象中,而不是Statement对象中。

Statement是JDBC API中的重要组成部分,它扮演着SQL语句执行者的角色,将应用程序的操作需求转化为数据库可以理解和执行的SQL命令。理解Statement对象的这个核心作用对于Java数据库编程非常重要。
知识点:Java
题友讨论(82)
1、Statement对象用于执行不带参数的简单SQL语句。 
2、Prepared Statement 对象用于执行预编译SQL语句。 
3、Callable Statement对象用于执行对存储过程的调用。
1、Statement对象用于执行不带参数的简单SQL语句。 
2、Prepared Statement 对象用于执行预编译SQL语句。 
3、Callable Statement对象用于执行对存储过程的调用。
188 回复
发布于 2018-09-14 23:40
第一点不太对吧
第一点不太对吧
点赞 回复
发布于 2019-01-02 23:56
0
去顺丰需要会python,java,c++是这样吗?大佬
去顺丰需要会python,java,c++是这样吗?大佬
点赞 回复
发布于 2019-10-03 02:10
0
展开3条回复
Class.forName("com.mysql.jdbc.Driver");  //加载jdbc驱动
con=DriverManager.getConnection(url,user,password); //建立连接
stmt=con.createStatement(); //创建语句执行者(stateMent用于执行不带参数的简单sql语句,PreparedStatement用于执行带参数的预编译sql语句能够预防sql注入,CallableStatement提供了一种标准形式的调用存储过程的方法)
stmt.execute(“sql语句”); 
rs=stmt.executeQuery("sql查询语句"); //结果集
Class.forName("com.mysql.jdbc.Driver");  //加载jdbc驱动
con=DriverManager.getConnection(url,user,password); //建立连接
stmt=con.createStatement(); //创建语句执行者(stateMent用于执行不带参数的简单sql语句,PreparedStatement用于执行带参数的预编译sql语句能够预防sql注入,CallableStatement提供了一种标准形式的调用存储过程的方法)
stmt.execute(“sql语句”); 
rs=stmt.executeQuery("sql查询语句"); //结果集
128 回复
发布于 2019-06-04 21:01
赞赞赞赞赞赞
赞赞赞赞赞赞
点赞 回复
发布于 2020-12-10 23:22 来自iOS客户端
0
mark
mark
点赞 回复
发布于 2021-08-10 15:05
0
展开7条回复
statement 用于执行不带参数的SQL语句 preperStatement 用于执行带参数的SQL语句可以防SQL注入 callableStatement 用于执行存储过程的调用
statement 用于执行不带参数的SQL语句 preperStatement 用于执行带参数的SQL语句可以防SQL注入 callableStatement 用于执行存储过程的调用
19 回复
发布于 2018-11-27 07:57
statement对象,用于执行不带参数的简单SQL语句
statement对象,用于执行不带参数的简单SQL语句
17 回复
发布于 2018-09-14 15:29
Jdbc六大步骤: 1.注册驱动 2.获取连接 3.创建语句对象 4.执行sql 5.处理语句集 6关闭连接
Jdbc六大步骤: 1.注册驱动 2.获取连接 3.创建语句对象 4.执行sql 5.处理语句集 6关闭连接
12 回复
发布于 2020-01-06 18:54
m
m
点赞 回复
发布于 2023-11-01 22:13 北京 来自Android客户端
0
加载驱动,建立连接,创建执行者,执行命令,返回结果。
加载驱动,建立连接,创建执行者,执行命令,返回结果。
12 回复
发布于 2019-09-09 15:12
言简意赅
言简意赅
点赞 回复
发布于 2020-01-31 10:46
0
JDBC的连接过程 1.加载驱动器 2.创建connection对象 3.创建statement--sql执行对象 4.编写sql语句 5.statement调用sql方法执行sql语句 6.创建处理结果集对象 7.处理结果,返回
JDBC的连接过程 1.加载驱动器 2.创建connection对象 3.创建statement--sql执行对象 4.编写sql语句 5.statement调用sql方法执行sql语句 6.创建处理结果集对象 7.处理结果,返回
9 回复
发布于 2020-07-31 10:45 来自Android客户端
用于执行SQL语句
用于执行SQL语句
4 回复
发布于 2018-09-13 23:49
JDBC中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象 向数据库发送增删改查语句即可
就是执行SQL语句
JDBC中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象 向数据库发送增删改查语句即可
就是执行SQL语句
3 回复
发布于 2022-01-12 22:00
Statement对象用于执行不带参数的简单SQL语句
Statement对象用于执行不带参数的简单SQL语句
3 回复
发布于 2019-04-21 15:30
收起
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
单选题
Java
19.

如下代码的输出结果是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test {
    public int aMethod(){
        static int i = 0;
        i++;
        return i;
    }
public static void main(String args[]){
    Test test = new Test();
    test.aMethod();
    int j = test.aMethod();
    System.out.println(j);
    }
}
A
0
B
1
C
2
D
编译失败
正确答案:D
你的答案:未作答
参考答案: 静态变量只能在类主体中定义,不能在方法中定义
知识点:Java、JavaSE
题友讨论(252)
Java中静态变量只能在类主体中定义,不能在方法中定义。 静态变量属于类所有而不属于方法。
Java中静态变量只能在类主体中定义,不能在方法中定义。 静态变量属于类所有而不属于方法。
508 回复
发布于 2016-12-27 15:49
涨姿势了!
涨姿势了!
点赞 回复
发布于 2017-04-17 00:17
0
学习了,长见识了;静态变量只能在类主体中定义,不能在方法中定义
学习了,长见识了;静态变量只能在类主体中定义,不能在方法中定义
5 回复
发布于 2017-06-02 15:15
0
展开19条回复
静态变量只能在类主体中定义,不能在方法中定义
静态变量只能在类主体中定义,不能在方法中定义
1 回复
发布于 2021-11-02 22:57 来自Android客户端
静态变量只能在类中定义
静态变量只能在类中定义
1 回复
发布于 2021-09-16 23:13 来自iOS客户端
静态变量只能在类主体中定义,不能在方法里面定义
静态变量只能在类主体中定义,不能在方法里面定义
1 回复
发布于 2021-08-26 12:36 来自Android客户端
静态变量只能在类主体中定义
静态变量只能在类主体中定义
1 回复
发布于 2021-08-19 11:59
静态变量属于类而不属于方法
静态变量属于类而不属于方法
1 回复
发布于 2020-12-25 17:21
方法内部定义的变量的作用域在方法"}"之后就结束了,而静态变量的作用域是和类相关的,作用域是全局。故不能在方法内部定义静态的变量。
方法内部定义的变量的作用域在方法"}"之后就结束了,而静态变量的作用域是和类相关的,作用域是全局。故不能在方法内部定义静态的变量。
1 回复
发布于 2020-06-11 20:40
静态变量只能定义在类中,不能定义在方法中。因为被static修饰的变量在类加载时候就已经被加载了,它属于整个类,被这个类的所有对象共享。而成员方法属于对象(类的实例),每个对象都有自己的一份拷贝。
静态变量只能定义在类中,不能定义在方法中。因为被static修饰的变量在类加载时候就已经被加载了,它属于整个类,被这个类的所有对象共享。而成员方法属于对象(类的实例),每个对象都有自己的一份拷贝。
点赞 回复
发布于 2019-07-31 14:45
Java中静态变量只能在类主体中定义,不能在方法中定义。
Java中静态变量只能在类主体中定义,不能在方法中定义。
点赞 回复
发布于 2018-07-14 16:56
静态变量在方法体中
静态变量在方法体中
1 回复
发布于 2017-03-08 21:08
收起
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 19
单选题
Java
数据库
20.
关于PreparedStatement与Statement描述错误的是()
A
一般而言,PreparedStatement比Statement执行效率更高
B
PreparedStatement会预编译SQL语句
C
Statement每次都会解析/编译SQL,确立并优化数据获取路径
D
Statement执行扫描的结果集比PreparedStatement大
正确答案:D
你的答案:未作答
官方解析:
Statement和PreparedStatement都是用于执行SQL语句的接口,D选项错误,因为Statement和PreparedStatement执行相同的SQL语句时,扫描的结果集是一样的,结果集的大小取决于SQL语句的查询条件,而不是执行方式。

分析其他选项:
A正确:PreparedStatement通过预编译和缓存执行计划,避免了重复编译,所以在重复执行相似SQL时效率更高。

B正确:PreparedStatement会预编译SQL语句并在数据库中缓存,这是它性能好的重要原因。预编译的SQL语句可以重复使用,而不需要每次都解析编译。

C正确:Statement每次执行SQL都要重新解析、编译,确定执行计划。这也是为什么它在重复执行类似SQL时性能不如PreparedStatement的原因。

PreparedStatement的主要优势:
1. 性能更好:预编译和重用执行计划
2. 安全性更高:可以防止SQL注入
3. 代码可读性更好:参数化SQL语句使代码更清晰

而Statement的特点是:
1. 适合执行一次性的SQL语句
2. 每次都需要重新解析编译
3. 需要手动拼接SQL字符串,容易出现SQL注入风险
知识点:2015、Java、数据库、Java工程师、JavaSE
题友讨论(57)
d是错的,因为statement和prestatement结果急是一样大的
d是错的,因为statement和prestatement结果急是一样大的
点赞 回复
发布于 2018-10-10 16:06
abc说的都很透彻,到d就含糊过去了……
abc说的都很透彻,到d就含糊过去了……
点赞 回复
发布于 2017-09-07 22:24
网上转的 1.Statement、PreparedStatement和CallableStatement都是接口(interface)。  2.Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。  3.  Statement接口提供了执行语句和获取结果的基本方法;  PreparedStatement接口添加了处理 IN 参数的方法;  CallableStatement接口添加了处理 OUT 参数的方法。  4.  a.Statement:  普通的不带参的查询SQL;支持批量更新,批量删除;  b.PreparedStatement:  可变参数的SQL,编译一次,执行多次,效率高;  安全性好,有效防止Sql注入等问题;  支持批量更新,批量删除;  c.CallableStatement:  继承自PreparedStatement,支持带参数的SQL操作;  支持调用存储过程,提供了对输出和输入/输出参数(INOUT)的支持;  Statement每次执行sql语句,数据库都要执行sql语句的编译 ,  最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement。  PreparedStatement是预编译的,使用PreparedStatement有几个好处  1. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。  2. 安全性好,有效防止Sql注入等问题。  3.  对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;  4.  代码的可读性和可维护性。  注:  executeQuery:返回结果集(ResultSet)。  executeUpdate: 执行给定SQL语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,  或者不返回任何内容的SQL语句(如 SQL DDL 语句)。  execute: 可用于执行任何SQL语句,返回一个boolean值,  表明执行该SQL语句是否返回了ResultSet。如果执行后第一个结果是ResultSet,则返回true,否则返回false。 
网上转的 1.Statement、PreparedStatement和CallableStatement都是接口(interface)。  2.Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。  3.  Statement接口提供了执行语句和获取结果的基本方法;  PreparedStatement接口添加了处理 IN 参数的方法;  CallableStatement接口添加了处理 OUT 参数的方法。  4.  a.Statement:  普通的不带参的查询SQL;支持批量更新,批量删除;  b.PreparedStatement:  可变参数的SQL,编译一次,执行多次,效率高;  安全性好,有效防止Sql注入等问题;  支持批量更新,批量删除;  c.CallableStatement:  继承自PreparedStatement,支持带参数的SQL操作;  支持调用存储过程,提供了对输出和输入/输出参数(INOUT)的支持;  Statement每次执行sql语句,数据库都要执行sql语句的编译 ,  最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement。  PreparedStatement是预编译的,使用PreparedStatement有几个好处  1. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。  2. 安全性好,有效防止Sql注入等问题。  3.  对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;  4.  代码的可读性和可维护性。  注:  executeQuery:返回结果集(ResultSet)。  executeUpdate: 执行给定SQL语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,  或者不返回任何内容的SQL语句(如 SQL DDL 语句)。  execute: 可用于执行任何SQL语句,返回一个boolean值,  表明执行该SQL语句是否返回了ResultSet。如果执行后第一个结果是ResultSet,则返回true,否则返回false。 
点赞 回复
发布于 2015-10-03 09:03
大兄弟 格式还是稍微整理一下好吧,看到脑壳痛
大兄弟 格式还是稍微整理一下好吧,看到脑壳痛
点赞 回复
发布于 2018-03-15 10:00
0
Statement与PreparedStatement的执行结果没有区别,但是在执行效率上Preparedstatement更高。
Statement与PreparedStatement的执行结果没有区别,但是在执行效率上Preparedstatement更高。
点赞 回复
发布于 2018-02-27 18:16
1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得,   preparedstatement支持批处理
1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得,   preparedstatement支持批处理
点赞 回复
发布于 2017-04-26 10:52
结果集感觉是一样的,都是一样的语句嘛,不能得出不同的结论吧?
结果集感觉是一样的,都是一样的语句嘛,不能得出不同的结论吧?
点赞 回复
发布于 2015-09-16 16:46

1 PreparedStatement 接口继承 Statement PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象。

2 、作为 Statement 的子类, PreparedStatement 继承了 Statement 的所有功能。三种方法

      execute executeQuery executeUpdate 已被更改以使之不再需要参数

 

3 、在 JDBC 应用中 , 如果你已经是稍有水平开发者 , 你就应该始终以 PreparedStatement 代替

      Statement. 也就是说 , 在任何时候都不要使用 Statement.

基于以下的原因 :

. 代码的可读性和可维护性 .

虽然用 PreparedStatement 来代替 Statement 会使代码多出几行 , 但这样的代码无论从可读性还是可维护性上来说 . 都比直接用 Statement 的代码高很多档次 :

stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");//stmt Statement 对象实例

 

perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");

perstmt.setString(1,var1);

perstmt.setString(2,var2);

perstmt.setString(3,var3);

perstmt.setString(4,var4);

perstmt.executeUpdate(); //prestmt PreparedStatement 对象实例

 

不用我多说 , 对于第一种方法 . 别说其他人去读你的代码 , 就是你自己过一段时间再去读 , 都会觉得伤心 .

 

PreparedStatement 尽最大可能提高性能 .

    语句在被 DB 的编译器编译后的执行代码被缓存下来 , 那么下次调用时只要是相同的预编译语句就不需要编译 , 只要将参数直接传入编译过的语句执行代码中 ( 相当于一个涵数 ) 就会得到执行 . 这并不是说只有一个 Connection 中多次执行的预编译语句被缓存 , 而是对于整个 DB , 只要预编译的语句语法和缓存中匹配 . 那么在任何时候就可以不需要再次编译而可以直接执行 . statement 的语句中 , 即使是相同一操作 , 而由于每次操作的数据不同所以使整个语句相匹配的机会极小 , 几乎不太可能匹配 . 比如 :

insert into tb_name (col1,col2) values ('11','22');

insert into tb_name (col1,col2) values ('11','23');

即使是相同操作但因为数据内容不一样 , 所以整个个语句本身不能匹配 , 没有缓存语句的意义 . 事实是没有数据库会对普通语句编译后的执行代码缓存 .

 

当然并不是所以预编译语句都一定会被缓存 , 数据库本身会用一种策略 , 比如使用频度等因素来决定什么时候不再缓存已有的预编译结果 . 以保存有更多的空间存储新的预编译语句 .

 

. 最重要的一点是极大地提高了安全性 .

 

即使到目前为止 , 仍有一些人连基本的恶义 SQL 语法都不知道 .

String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";

如果我们把 [' or '1' = '1] 作为 varpasswd 传入进来 . 用户名随意 , 看看会成为什么 ?

 

select * from tb_name = ' 随意 ' and passwd = '' or '1' = '1';

因为 '1'='1' 肯定成立 , 所以可以任何通过验证 . 更有甚者 :

[';drop table tb_name;] 作为 varpasswd 传入进来 , :

select * from tb_name = ' 随意 ' and passwd = '';drop table tb_name; 有些数据库是不会让你成功的 , 但也有很多数据库就可以使这些语句得到执行 .

 

而如果你使用预编译语句 . 你传入的任何内容就不会和原来的语句发生任何匹配的关系 . 只要全使用预编译语句 , 你就用不着对传入的数据做任何过虑 . 而如果使用普通的 statement, 有可能要对 drop,; 等做费尽心机的判断和过虑 .

1 PreparedStatement 接口继承 Statement PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象。

2 、作为 Statement 的子类, PreparedStatement 继承了 Statement 的所有功能。三种方法

      execute executeQuery executeUpdate 已被更改以使之不再需要参数

 

3 、在 JDBC 应用中 , 如果你已经是稍有水平开发者 , 你就应该始终以 PreparedStatement 代替

      Statement. 也就是说 , 在任何时候都不要使用 Statement.

基于以下的原因 :

. 代码的可读性和可维护性 .

虽然用 PreparedStatement 来代替 Statement 会使代码多出几行 , 但这样的代码无论从可读性还是可维护性上来说 . 都比直接用 Statement 的代码高很多档次 :

stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");//stmt Statement 对象实例

 

perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");

perstmt.setString(1,var1);

perstmt.setString(2,var2);

perstmt.setString(3,var3);

perstmt.setString(4,var4);

perstmt.executeUpdate(); //prestmt PreparedStatement 对象实例

 

不用我多说 , 对于第一种方法 . 别说其他人去读你的代码 , 就是你自己过一段时间再去读 , 都会觉得伤心 .

 

PreparedStatement 尽最大可能提高性能 .

    语句在被 DB 的编译器编译后的执行代码被缓存下来 , 那么下次调用时只要是相同的预编译语句就不需要编译 , 只要将参数直接传入编译过的语句执行代码中 ( 相当于一个涵数 ) 就会得到执行 . 这并不是说只有一个 Connection 中多次执行的预编译语句被缓存 , 而是对于整个 DB , 只要预编译的语句语法和缓存中匹配 . 那么在任何时候就可以不需要再次编译而可以直接执行 . statement 的语句中 , 即使是相同一操作 , 而由于每次操作的数据不同所以使整个语句相匹配的机会极小 , 几乎不太可能匹配 . 比如 :

insert into tb_name (col1,col2) values ('11','22');

insert into tb_name (col1,col2) values ('11','23');

即使是相同操作但因为数据内容不一样 , 所以整个个语句本身不能匹配 , 没有缓存语句的意义 . 事实是没有数据库会对普通语句编译后的执行代码缓存 .

 

当然并不是所以预编译语句都一定会被缓存 , 数据库本身会用一种策略 , 比如使用频度等因素来决定什么时候不再缓存已有的预编译结果 . 以保存有更多的空间存储新的预编译语句 .

 

. 最重要的一点是极大地提高了安全性 .

 

即使到目前为止 , 仍有一些人连基本的恶义 SQL 语法都不知道 .

String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";

如果我们把 [' or '1' = '1] 作为 varpasswd 传入进来 . 用户名随意 , 看看会成为什么 ?

 

select * from tb_name = ' 随意 ' and passwd = '' or '1' = '1';

因为 '1'='1' 肯定成立 , 所以可以任何通过验证 . 更有甚者 :

[';drop table tb_name;] 作为 varpasswd 传入进来 , :

select * from tb_name = ' 随意 ' and passwd = '';drop table tb_name; 有些数据库是不会让你成功的 , 但也有很多数据库就可以使这些语句得到执行 .

 

而如果你使用预编译语句 . 你传入的任何内容就不会和原来的语句发生任何匹配的关系 . 只要全使用预编译语句 , 你就用不着对传入的数据做任何过虑 . 而如果使用普通的 statement, 有可能要对 drop,; 等做费尽心机的判断和过虑 .

127 回复
发布于 2015-12-21 09:12
7144盒4
7144盒4
点赞 回复
发布于 2016-10-15 17:16
0
真的涨姿势了,真的居然不知道statement安全性还能带来这样的威胁。多谢指点
真的涨姿势了,真的居然不知道statement安全性还能带来这样的威胁。多谢指点
点赞 回复
发布于 2016-12-01 11:37
0
展开1条回复
现在的框架封装得太好了,很少有直接用JDBC直接编程了
现在的框架封装得太好了,很少有直接用JDBC直接编程了
点赞 回复
发布于 2016-07-08 16:26
点赞 回复
发布于 2016-03-27 16:38
因为PreparedStatement有预编译的过程,所以第一次扫描的集合
PreparedStatement会大于等于 Statement
因为PreparedStatement有预编译的过程,所以第一次扫描的集合
PreparedStatement会大于等于 Statement
51 回复
发布于 2015-10-07 22:39
前三句都是对PreparedStatement的解释
前三句都是对PreparedStatement的解释
点赞 回复
发布于 2015-10-07 22:39
0
我觉得这个说法似乎不对,两者扫描的结果集应该是一样的
我觉得这个说法似乎不对,两者扫描的结果集应该是一样的
点赞 回复
发布于 2016-08-22 15:18
0
展开5条回复
收起
  • 1
  • 2
  • 3
  • 4
单选题
Java
21.
下面 Java 代码的运行结果为()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Test {
    private int x = 10;
 
    class Inner {
        private int x = 20;
 
        public void print() {
            System.out.println(Test.this.x);
        }
    }
 
    public static void main(String[] args) {
        Test outer = new Test();
        Test.Inner inner = outer.new Inner();
        inner.print();
    }
}
A
10
B
20
C
编译错误
D
运行错误
正确答案:A
你的答案:未作答
官方解析:
这道题目考察了Java内部类访问外部类成员变量的知识点。

Test.this.x输出的是外部类Test中的成员变量x的值,也就是10。这是因为:

1. 虽然内部类Inner中也定义了一个名为x的成员变量,值为20,但是通过Test.this.x的方式明确指定要访问外部类Test的x变量。

2. 内部类可以直接访问外部类的所有成员(包括私有成员),而Test.this代表外部类的引用。

3. 当内部类和外部类存在同名成员时,默认情况下访问的是内部类的成员。如果要访问外部类的同名成员,需要使用"外部类名.this.成员名"的方式。

分析其他选项:
B错误:输出不会是20,因为代码明确使用Test.this.x访问的是外部类的x。
C错误:代码可以正常编译,语法完全正确。
D错误:代码可以正常运行,不会出现运行时异常。

这段代码演示了Java内部类的一个重要特性:内部类可以访问外部类的成员,即使存在同名的情况。这种机制为内部类与外部类之间的交互提供了便利。
知识点:Java
题友讨论(2)
在Java中,Test.this表示内部类对外部类实例的引用,主要用于解决内部类与外部类存在同名成员时的访问歧义,或在内部类中显式调用外部类的方法/属性。
在Java中,Test.this表示内部类对外部类实例的引用,主要用于解决内部类与外部类存在同名成员时的访问歧义,或在内部类中显式调用外部类的方法/属性。
1 回复
发布于 07-05 06:41 广东 来自iOS客户端
这题看不懂
这题看不懂
点赞 回复
发布于 06-05 22:33 广东 来自iOS客户端
收起
单选题
数据库
22.

淘宝网上的信息处理系统属于()

A
B/S 模型
B
C/S 模型
C
分布式模型
D
面向对象模型
正确答案:C
你的答案:未作答
官方解析:
淘宝网这样的大型电商平台采用分布式架构是最合适的选择。分布式系统可以将整个应用分散到多个服务器节点上运行,每个节点负责不同的业务功能,这样可以提高系统的可扩展性、容错性和性能。

分析各选项:

A选项B/S模型错误:虽然淘宝网确实采用了B/S架构模式,但这只是系统的表现层架构,不能完整描述淘宝网的整体系统架构。

B选项C/S模型错误:C/S模式主要用于传统的客户端-服务器应用,不适合处理淘宝这样的大规模并发访问。

C选项正确:分布式模型最适合描述淘宝网的系统架构,因为:
1. 可以处理海量用户的并发访问
2. 支持业务的水平扩展
3. 提供更好的容错机制
4. 便于实现负载均衡
5. 适合处理复杂的业务逻辑和数据处理需求

D选项面向对象模型错误:面向对象是一种编程范式,主要描述代码组织方式,而不是系统架构模式。它不能完整地描述淘宝网这样复杂系统的整体架构特征。
知识点:数据库
题友讨论(7)
A、B、C、D
A选项,B/S:浏览器/服务器模型,用户通过www浏览器实现,一部分事务逻辑在前端(浏览器)实现,主要事务逻辑在服务端实现。通常以三层架构(表现层、事务逻辑层、数据处理层)部署实施。众所周知的淘宝官网地址。
B选项,C/S:客户/服务器模型,软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。淘宝客户端应用软件系统也是Client/Server形式的两层结构。
C选项,分布式(水平扩展,垂直拆分)对于淘宝的客户上亿流量的访问请求操作,服务器端快速地作出及时响应是必需的。
D选项向对象模型是一种新兴的数据模型,它采用面向对象的方法来设计数据库。面向对象的数据库存储对象是以对象为单位,每个对象包含对象的属性和方法,具有类和继承等特点。面向对象数据模型适合于需要管理数据对象之间存在复杂关系的应用,特别适合于特定的应用,如工程、电子商务、医疗等
综上所述,淘宝网上的信息处理系统,从客户访问请求服务器的选择A、B均符合。从服务器承载庞大的客户请求数据量,C选项是必需的从服务器数据库的维护数据关系,D选项也是正确的
A、B、C、D
A选项,B/S:浏览器/服务器模型,用户通过www浏览器实现,一部分事务逻辑在前端(浏览器)实现,主要事务逻辑在服务端实现。通常以三层架构(表现层、事务逻辑层、数据处理层)部署实施。众所周知的淘宝官网地址。
B选项,C/S:客户/服务器模型,软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。淘宝客户端应用软件系统也是Client/Server形式的两层结构。
C选项,分布式(水平扩展,垂直拆分)对于淘宝的客户上亿流量的访问请求操作,服务器端快速地作出及时响应是必需的。
D选项向对象模型是一种新兴的数据模型,它采用面向对象的方法来设计数据库。面向对象的数据库存储对象是以对象为单位,每个对象包含对象的属性和方法,具有类和继承等特点。面向对象数据模型适合于需要管理数据对象之间存在复杂关系的应用,特别适合于特定的应用,如工程、电子商务、医疗等
综上所述,淘宝网上的信息处理系统,从客户访问请求服务器的选择A、B均符合。从服务器承载庞大的客户请求数据量,C选项是必需的从服务器数据库的维护数据关系,D选项也是正确的


24 回复
发布于 2019-04-26 22:48
分布式:把程序拆分成不同的服务器分别进行处理,然后组合处理结果传回用户
用于逻辑复杂应用,可以分担服务器压力,业务任意组合
分布式:把程序拆分成不同的服务器分别进行处理,然后组合处理结果传回用户
用于逻辑复杂应用,可以分担服务器压力,业务任意组合
2 回复
发布于 2021-07-22 17:02
分布式的数据库
分布式的数据库
2 回复
发布于 2017-09-26 20:02
分布式模型
分布式模型
1 回复
发布于 2017-10-06 15:46
现在大型互联网公司还存在单体架构的产品吗?应该都是分布式了
现在大型互联网公司还存在单体架构的产品吗?应该都是分布式了
点赞 回复
发布于 2020-03-28 19:53
答案:C
中间有个名词:1500节点,表示这是多节点的网站。那么这种网站叫啥名字呢?你猜?

淘宝技术部专家、《大型分布式网站架构设计与实践》作者陈康贤

所以这题如果是多选我先AC
如果是单选,我只能选C。
答案:C

中间有个名词:1500节点,表示这是多节点的网站。那么这种网站叫啥名字呢?你猜?

淘宝技术部专家、《大型分布式网站架构设计与实践》作者陈康贤


所以这题如果是多选我先AC

如果是单选,我只能选C。
点赞 回复
发布于 2019-04-26 16:25
收起
单选题
Linux
23.
使用什么命令进行查询,并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和*?
A
whereis
B
find
C
locate
D
type
正确答案:C
你的答案:未作答
官方解析:
locate命令是正确答案,因为它通过在文件名数据库中检索来查找文件,而不是直接在文件系统中搜索。locate命令支持使用通配符?和*进行模糊匹配,查询速度非常快。它使用updatedb程序创建的数据库(/var/lib/mlocate/mlocate.db),这个数据库会定期更新。

分析其他选项:

A. whereis命令主要用于定位可执行文件、源代码文件和帮助文档的位置,搜索范围有限,且不支持全面的通配符匹配。

B. find命令是在实际的文件系统中进行搜索,会遍历硬盘上的目录,搜索速度相对较慢。虽然支持通配符,但它是实时搜索而不是检索数据库。

D. type命令用于显示命令的类型(是内部命令还是外部命令),与文件查找无关。

需要注意的是,locate命令的搜索结果取决于数据库的更新时间,如果数据库未及时更新,可能无法找到最新创建的文件。可以使用updatedb命令手动更新数据库。
知识点:Linux
题友讨论(18)
locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和*
find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令


locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和*
find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令


58 回复
发布于 2017-06-06 21:56
后劲大哥真给劲!
后劲大哥真给劲!
1 回复
发布于 2023-08-11 08:48 江苏
0
  我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: 
  • which       查看可执行文件的位置 
  • whereis    查看文件的位置 
  • locate       配合数据库查看文件位置 
  • find          实际搜寻硬盘查询文件名称 (find也可以根据文件大小-size 时间-atime 正则表达式-regex)

  我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: 
  • which       查看可执行文件的位置 
  • whereis    查看文件的位置 
  • locate       配合数据库查看文件位置 
  • find          实际搜寻硬盘查询文件名称 (find也可以根据文件大小-size 时间-atime 正则表达式-regex)

36 回复
发布于 2017-06-24 15:38
whereis也配合了数据库
whereis也配合了数据库
点赞 回复
发布于 2018-01-31 22:13
0
locate [-d ][--help][--version][范本样式...]
locate [-d ][--help][--version][范本样式...]
点赞 回复
发布于 2020-04-05 19:09
0
展开2条回复
which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as  commands  in a strictly POSIX-conformant shell.
whereis locates the binary, source and manual files for  the  specified command  names.
locate  reads  one or more databases prepared by updatedb(8) and writes file names matching at least one of the PATTERNs  to  standard  output, one per line.



which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as  commands  in a strictly POSIX-conformant shell.
whereis locates the binary, source and manual files for  the  specified command  names.
locate  reads  one or more databases prepared by updatedb(8) and writes file names matching at least one of the PATTERNs  to  standard  output, one per line.



9 回复
发布于 2018-01-04 09:32
locate与find 不同: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找
locate的速度比find快,它并不是真的查找,而是查数据库,一般文件数据库在/var/lib/slocate/slocate.db中,所以locate的查找并不是实时的,而是以数据库的更新为准。
  • whereis命令用于查找文件
该指令会在特定目录中查找符合条件的文件,这些文件应属于原始代码、二进制文件,或是帮助文件。
该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
语法:whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]

  • find命令用来在指定目录下查找文件。
任何位于参数之前的字符串都将被视为欲查找的目录名,如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法:find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

  • locate命令用于查找符合条件的文档。
它会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。
一般情况我们只需要输入 locate your_file_name 即可查找指定文件。
语法:locate [-d ][--help][--version][范本样式...]

  • type命令 用来显示指定命令的类型。
它可以判断给出的指令是内部指令还是外部指令。
语法:type (选项) (参数)


locate与find 不同: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找
locate的速度比find快,它并不是真的查找,而是查数据库,一般文件数据库在/var/lib/slocate/slocate.db中,所以locate的查找并不是实时的,而是以数据库的更新为准。
  • whereis命令用于查找文件
该指令会在特定目录中查找符合条件的文件,这些文件应属于原始代码、二进制文件,或是帮助文件。
该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
语法:whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]

  • find命令用来在指定目录下查找文件。
任何位于参数之前的字符串都将被视为欲查找的目录名,如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法:find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

  • locate命令用于查找符合条件的文档。
它会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。
一般情况我们只需要输入 locate your_file_name 即可查找指定文件。
语法:locate [-d ][--help][--version][范本样式...]

  • type命令 用来显示指定命令的类型。
它可以判断给出的指令是内部指令还是外部指令。
语法:type (选项) (参数)


7 回复
发布于 2020-04-05 19:02
Linux常用查找命令有五个:
1,which:查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。可以查看某个系统命令是否存在,以及执行的是哪个位置的命令。
选项:-n<文件名长度>:指定的长度必须大于等于所有文件中最常的文件名
           -p<文件名长度>:与-n相同但是包含文件的路径
           -w:输出时栏位宽度
           -V:版本信息
参数:指令名列表
2,whereis:首先去掉文件名中的前缀空格和以.开头的任何字符,在数据库中(var/lib/slocate/slocate.db)查找与上述处理后 的文件名相匹配的二进制文件,源文件,帮助手册文件。
选项:
-b:只查找二进制文件
-B<目录>:在设置目录下查找二进制文件
-f:不显示文件名前的路径名称
-m:只查找说明文件
-M<目录>:在设置目录下查找说明文件
-s:只查找原始代码文件
-S:同上在目录中
-u:查找不包含指定类型的文件
参数:要查找的二进制程序,源文件和手册页的指令名
3,type:显示指定命令的类型,判断句给出的指令是内部还是外部指令
选项:
-t:“file”外部指令、“alias”命令别名、“builtin”内部指令
-p:如果是外部指令显示其绝对路径
-a:在PATH指定路径中显示给定指令的信息
参数:要显示类型的指令
4,locate:查询系统上预建的文件索引数据库(/var/lib/mlocate/mlocate.db)依赖实现构建的索引。
查找速度快,模糊查找,非实时查找,搜索文件全路径
选项:
-i:不区分大小写
-n:只列举前N个匹配
参数:查找字符创:要查找的文件名含有的字符串
5,find:在指定目录下查找文件。查找略慢,精确实时
选项:
查找条件
只搜索层级:
    -maxdepth level 最大搜索深度,指定目录为第一级
    根据文件名和inode查找
        -name "文件名"
        -iname "文件名" :不区分大小写
        -inum n:按inode相同的inode号的文件
        -links n :链接数为n的文件
        -regex "PATTERN" :以PATTERN匹配整个文件路径的字符串,不仅仅是文件名称
    根据所属组查找:
        -user USERNAME
        -group GROUPNAME
        -uid UserID
        -gid GroupID
        -nouser
        -nogroup
根据文件类型查找:
        -type TYPE
                f  普通文件
                d 目录文件
                l 符号链接文件
                s 套接字文件
                b 块文件
                c 字符设备文件
                p 管道文件
根据文件大小查找:
        -size [+|-]  #UNIT
        #UNIT:(#-1,#) -#UNIT:(0,#-1) +#UNIT:(#,∞)
         根据时间戳: 
                以“天”为单位: -atime[+|-]# #:[#,#+1] +#:[#+1,,∞] -#:[0,#]     -ctime     -mtime 
                以“分钟”为单位: -amin     -mmin     -cmin 
        根据权限查找: -perm[/|-]MODE
                                MODE:精确权限匹配
                                     /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+从centos7开始淘汰 
                                    -MODE:每一类对象都必须同时拥有指定权限,与关系 
                                    O 表示不关注
参数:起始目录,查找文件的起始目录
比较:
    which:支持可执行文件,查找PATH,原理遍历PATH指定目录找完全匹配的文件名的可执行文件,效率高
    whereis:支持二进制文件源文件帮助文档,查找数据库索引,原理数据库索引,对去除.之后的所有字符后的文件名完全匹配,效率高
    locate:支持所有文件类型,数据库索引,绝对路径,部分匹配,效率高,模糊查找
    find:支持所有文件类型,查找指定路径,默认遍历当前路径和子路径,原理遍历磁盘,效率低
Linux常用查找命令有五个:
1,which:查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。可以查看某个系统命令是否存在,以及执行的是哪个位置的命令。
选项:-n<文件名长度>:指定的长度必须大于等于所有文件中最常的文件名
           -p<文件名长度>:与-n相同但是包含文件的路径
           -w:输出时栏位宽度
           -V:版本信息
参数:指令名列表

2,whereis:首先去掉文件名中的前缀空格和以.开头的任何字符,在数据库中(var/lib/slocate/slocate.db)查找与上述处理后 的文件名相匹配的二进制文件,源文件,帮助手册文件。
选项:
-b:只查找二进制文件
-B<目录>:在设置目录下查找二进制文件
-f:不显示文件名前的路径名称
-m:只查找说明文件
-M<目录>:在设置目录下查找说明文件
-s:只查找原始代码文件
-S:同上在目录中
-u:查找不包含指定类型的文件
参数:要查找的二进制程序,源文件和手册页的指令名

3,type:显示指定命令的类型,判断句给出的指令是内部还是外部指令
选项:
-t:“file”外部指令、“alias”命令别名、“builtin”内部指令
-p:如果是外部指令显示其绝对路径
-a:在PATH指定路径中显示给定指令的信息
参数:要显示类型的指令

4,locate:查询系统上预建的文件索引数据库(/var/lib/mlocate/mlocate.db)依赖实现构建的索引。
查找速度快,模糊查找,非实时查找,搜索文件全路径
选项:
-i:不区分大小写
-n:只列举前N个匹配
参数:查找字符创:要查找的文件名含有的字符串

5,find:在指定目录下查找文件。查找略慢,精确实时
选项:
查找条件
只搜索层级:
    -maxdepth level 最大搜索深度,指定目录为第一级
    根据文件名和inode查找
        -name "文件名"
        -iname "文件名" :不区分大小写
        -inum n:按inode相同的inode号的文件
        -links n :链接数为n的文件
        -regex "PATTERN" :以PATTERN匹配整个文件路径的字符串,不仅仅是文件名称
    根据所属组查找:
        -user USERNAME
        -group GROUPNAME
        -uid UserID
        -gid GroupID
        -nouser
        -nogroup

根据文件类型查找:
        -type TYPE
                f  普通文件
                d 目录文件
                l 符号链接文件
                s 套接字文件
                b 块文件
                c 字符设备文件
                p 管道文件

根据文件大小查找:
        -size [+|-]  #UNIT
        #UNIT:(#-1,#) -#UNIT:(0,#-1) +#UNIT:(#,∞)
         根据时间戳: 
                以“天”为单位: -atime[+|-]# #:[#,#+1] +#:[#+1,,∞] -#:[0,#]     -ctime     -mtime 
                以“分钟”为单位: -amin     -mmin     -cmin 
        根据权限查找: -perm[/|-]MODE
                                MODE:精确权限匹配
                                     /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+从centos7开始淘汰 
                                    -MODE:每一类对象都必须同时拥有指定权限,与关系 
                                    O 表示不关注
参数:起始目录,查找文件的起始目录


比较:
    which:支持可执行文件,查找PATH,原理遍历PATH指定目录找完全匹配的文件名的可执行文件,效率高
    whereis:支持二进制文件源文件帮助文档,查找数据库索引,原理数据库索引,对去除.之后的所有字符后的文件名完全匹配,效率高
    locate:支持所有文件类型,数据库索引,绝对路径,部分匹配,效率高,模糊查找
    find:支持所有文件类型,查找指定路径,默认遍历当前路径和子路径,原理遍历磁盘,效率低
3 回复
发布于 2019-07-31 11:56
 locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和*
find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令

 locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和*
find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令

2 回复
发布于 2023-09-15 19:24 云南
locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和* find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作 whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s) type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令
locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和* find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作 whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s) type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令
2 回复
发布于 2021-05-18 21:46 来自Android客户端
locate 是使用系统中 /var/lib/mlocate/mlocate.db数据文件,可以使用updatedb进行对最近新添加的文件进行更新。
locate 是使用系统中 /var/lib/mlocate/mlocate.db数据文件,可以使用updatedb进行对最近新添加的文件进行更新。
2 回复
发布于 2019-04-07 16:35

locate命令用于通过文件名数据库进行快速查找文件。它并不直接对硬盘上的文件系统进行搜索,而是对预先构建的文件名数据库进行检索。这种方式比实时搜索更快速和高效。

locate命令可以使用通配符来模糊匹配文件名。通配符*可以匹配任意字符序列,包括零个或多个字符。

选项说明如下:

  • whereis:用于定位二进制、源代码和帮助文档等文件的位置。
  • find:用于在指定路径下递归搜索文件和目录,并执行指定的操作。
  • locate:用于通过文件名数据库进行快速查找文件。
  • type:用于确定给定命令是否为内置命令、可执行文件或别名。

locate命令用于通过文件名数据库进行快速查找文件。它并不直接对硬盘上的文件系统进行搜索,而是对预先构建的文件名数据库进行检索。这种方式比实时搜索更快速和高效。

locate命令可以使用通配符来模糊匹配文件名。通配符*可以匹配任意字符序列,包括零个或多个字符。

选项说明如下:

  • whereis:用于定位二进制、源代码和帮助文档等文件的位置。
  • find:用于在指定路径下递归搜索文件和目录,并执行指定的操作。
  • locate:用于通过文件名数据库进行快速查找文件。
  • type:用于确定给定命令是否为内置命令、可执行文件或别名。
1 回复
发布于 2023-11-01 10:45 湖南
关于locate命令多说两句
有些Linux版本系统刚安装好发现locate命令用不了,这是因为locate通过快速搜索数据库来输出结果的,这个搜索的数据库是由另一个叫updatedb的程序创建的。这个程序是一个定期任务,一般每天自动执行一次更新数据库中的数据,所以当发现locate查找不了文件时,先手动执行updatedb程序更新数据库就可以了。
locate命令如果系统中没有的话,Redhat系的系统可以安装mlocate。
关于locate命令多说两句
有些Linux版本系统刚安装好发现locate命令用不了,这是因为locate通过快速搜索数据库来输出结果的,这个搜索的数据库是由另一个叫updatedb的程序创建的。这个程序是一个定期任务,一般每天自动执行一次更新数据库中的数据,所以当发现locate查找不了文件时,先手动执行updatedb程序更新数据库就可以了。
locate命令如果系统中没有的话,Redhat系的系统可以安装mlocate。
1 回复
发布于 2022-04-23 10:56
收起
  • 1
  • 2
单选题
数据库
24.
下列关于视图与基本表的对比正确的是()。
A
视图的定义功能强于基本表
B
视图的操作功能强于基本表
C
视图的数据控制功能弱于基本表
D
上面提到的三种功能二者均相当
正确答案:A
你的答案:未作答
官方解析:
视图和基本表在功能上确实存在差异。A选项正确,因为视图可以基于多个基本表构建,能够实现更复杂的数据展示和组合,其定义功能确实强于单一的基本表。视图可以通过各种 SQL 语句(包括连接、子查询等)来定义,而基本表的定义相对简单。

分析其他选项:

B错误:基本表具有完整的数据操作功能,包括增删改查。而某些视图可能受限制,比如包含聚合函数的视图就不能执行更新操作,所以视图的操作功能实际上弱于基本表。

C错误:视图可以设置访问权限,实现更细粒度的数据控制。通过视图可以只向用户开放部分数据列或行,数据控制功能比基本表更强。

D错误:由于前面分析可知,视图和基本表在这三种功能上并不是均等关系。视图在定义功能上更强,但在操作功能上较弱,在数据控制功能上则更强。

所以视图和基本表各有特点,它们的功能强弱是不同的。A选项正确地指出了视图在定义功能方面的优势。
知识点:数据库、SQL+MySQL
题友讨论(13)
定义能力强于表,因为可以在多张表上定义视图,操作能力弱于表,控制能力相当
定义能力强于表,因为可以在多张表上定义视图,操作能力弱于表,控制能力相当
102 回复
发布于 2017-09-06 14:47
纯概念题
纯概念题
点赞 回复
发布于 2019-09-23 07:36
0
牛批plus
牛批plus
点赞 回复
发布于 2020-04-01 20:48
0
展开1条回复

答案:A。

视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,不同于基本表,它是一个虚表,在数据库中,存放的只是视图的定义而已,而不存放数据,这些数据仍然存放在原来的基本表结构中。只有在使用视图的时候才会执行视图的定义,从基本表中查询数据。

视图的作用非常多,主要有以下几点:首先,它可以简化数据查询语句;其次,它可以使用户从多角度看待同一数据;再次,它可以提高数据的安全性;最后,它提供了一定程度的逻辑独立性等。

通过引入视图机制,用户可以将注意力集中在其关心的数据上而非全部数据,这样就大大提高了用户效率与用户满意度,而且如果这些数据来源于多个基本表结构,或者数据不仅来自于基本表结构,还有一部分数据来源于其他视图,并且搜索条件又比较复杂时,需要编写的查询语句就会比较繁琐,此时定义视图就可以使数据的查询语句变得简单可行。定义视图可以将表与表之间复杂的操作连接和搜索条件对用户不可见,用户只需要简单地对一个视图进行查询即可,所以,增加了数据的安全性,但是不能提高查询的效率。

对于选项A,视图可以被定义为多个表的连接,也可以被定义为只有部分列可见,或满足条件的部分行可见,因此,有更强的定义功能。所以,选项A正确。

对于选项B,视图有的操作表都有,视图一般被用来查找而使用。所以,选项B错误。

对于选项C,视图的数据控制能力要强于表,视图可以被定义为多个表的连接,也可以被定义为只有部分列可见,或满足条件的部分行可见,通过定义不同的存储过程,并授予不同的权限,可以很灵活地对数据进行控制。所以,选项C错误。

对于选项D,自然也就错了。

答案:A。

视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,不同于基本表,它是一个虚表,在数据库中,存放的只是视图的定义而已,而不存放数据,这些数据仍然存放在原来的基本表结构中。只有在使用视图的时候才会执行视图的定义,从基本表中查询数据。

视图的作用非常多,主要有以下几点:首先,它可以简化数据查询语句;其次,它可以使用户从多角度看待同一数据;再次,它可以提高数据的安全性;最后,它提供了一定程度的逻辑独立性等。

通过引入视图机制,用户可以将注意力集中在其关心的数据上而非全部数据,这样就大大提高了用户效率与用户满意度,而且如果这些数据来源于多个基本表结构,或者数据不仅来自于基本表结构,还有一部分数据来源于其他视图,并且搜索条件又比较复杂时,需要编写的查询语句就会比较繁琐,此时定义视图就可以使数据的查询语句变得简单可行。定义视图可以将表与表之间复杂的操作连接和搜索条件对用户不可见,用户只需要简单地对一个视图进行查询即可,所以,增加了数据的安全性,但是不能提高查询的效率。

对于选项A,视图可以被定义为多个表的连接,也可以被定义为只有部分列可见,或满足条件的部分行可见,因此,有更强的定义功能。所以,选项A正确。

对于选项B,视图有的操作表都有,视图一般被用来查找而使用。所以,选项B错误。

对于选项C,视图的数据控制能力要强于表,视图可以被定义为多个表的连接,也可以被定义为只有部分列可见,或满足条件的部分行可见,通过定义不同的存储过程,并授予不同的权限,可以很灵活地对数据进行控制。所以,选项C错误。

对于选项D,自然也就错了。

37 回复
发布于 2018-07-20 18:31
视图是从一个或几个基本表导出的表,是一个虚表,而表是物理存在的,
视图是已编译的sql语句
视图的优点:
1、视图能够简化用户的操作
2、视图使用户能以多种角度看待同一数据
3、视图重构数据库提供了一定程度的逻辑独立性
4、视图能够对机密数据提供安全保护
5、视图能够更清晰的表达
视图是从一个或几个基本表导出的表,是一个虚表,而表是物理存在的,
视图是已编译的sql语句
视图的优点:
1、视图能够简化用户的操作
2、视图使用户能以多种角度看待同一数据
3、视图重构数据库提供了一定程度的逻辑独立性
4、视图能够对机密数据提供安全保护
5、视图能够更清晰的表达

4 回复
发布于 2019-02-18 23:08
定力强,实操弱,控制力不相上下
定力强,实操弱,控制力不相上下
2 回复
发布于 2022-03-07 16:29
选A,
视图的定义功能强于基本表
选A,
视图的定义功能强于基本表
2 回复
发布于 2021-05-12 15:46
定义能力强于表 控制能力相当 操作能力弱于表 定义能力强于表 控制能力相当 操作能力弱于表
定义能力强于表 控制能力相当 操作能力弱于表 定义能力强于表 控制能力相当 操作能力弱于表
点赞 回复
发布于 2024-03-07 03:31 广东 来自Android客户端

A. 视图的定义功能强于基本表:视图是基于一个或多个基本表的查询结果,可以实现数据筛选、转换和简化。视图的定义是动态的,你可以根据需要创建不同的视图,以显示不同的数据子集或者以不同的方式呈现数据。

B. 视图的操作功能通常与基本表相当:视图允许进行数据查询和操作,但通常与基本表具有相似的功能,如SELECT、INSERT、UPDATE和DELETE。然而,视图可能限制某些操作,特别是在视图中包含了聚合、计算字段或连接多个表时。

C. 视图的数据控制功能通常弱于基本表:基本表通常具有更严格的数据完整性约束和访问控制,而视图可以提供更灵活的数据访问。视图可以用于筛选、隐藏或重命名基本表中的数据,但不具备强制执行数据完整性的能力。

综上所述,视图的主要优势在于其定义功能的灵活性,但在数据完整性和控制方面通常较弱。基本表则提供了更强的数据控制功能。所以,正确答案是A。

A. 视图的定义功能强于基本表:视图是基于一个或多个基本表的查询结果,可以实现数据筛选、转换和简化。视图的定义是动态的,你可以根据需要创建不同的视图,以显示不同的数据子集或者以不同的方式呈现数据。

B. 视图的操作功能通常与基本表相当:视图允许进行数据查询和操作,但通常与基本表具有相似的功能,如SELECT、INSERT、UPDATE和DELETE。然而,视图可能限制某些操作,特别是在视图中包含了聚合、计算字段或连接多个表时。

C. 视图的数据控制功能通常弱于基本表:基本表通常具有更严格的数据完整性约束和访问控制,而视图可以提供更灵活的数据访问。视图可以用于筛选、隐藏或重命名基本表中的数据,但不具备强制执行数据完整性的能力。

综上所述,视图的主要优势在于其定义功能的灵活性,但在数据完整性和控制方面通常较弱。基本表则提供了更强的数据控制功能。所以,正确答案是A。

点赞 回复
发布于 2023-10-13 10:41 广东
视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,不同于基本表,展示效果更好
而基本表的操作性更强
视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,不同于基本表,展示效果更好
而基本表的操作性更强
点赞 回复
发布于 2021-08-09 16:52
视图的操作的确比基本表弱,因为不是所有对视图的操作都可以转换为对基本表的操作,但是定义更强,操纵相当就不清楚了
视图的操作的确比基本表弱,因为不是所有对视图的操作都可以转换为对基本表的操作,但是定义更强,操纵相当就不清楚了
点赞 回复
发布于 2021-06-18 13:44 来自Android客户端
定义能力强于表,因为可以在多张表上定义视图,操作能力弱于表,控制能力相当
定义能力强于表,因为可以在多张表上定义视图,操作能力弱于表,控制能力相当
点赞 回复
发布于 2021-03-12 18:20 来自Android客户端
收起
单选题
数据库
25.
下图给定的关系R,它满足(   )。

A
1NF
B
2NF
C
3NF
D
BCNF
正确答案:B
你的答案:未作答
官方解析:
根据给定关系R的结构和依赖关系,这是一个典型的2NF(第二范式)的例子。

让我们逐层分析:

1. 该关系模式中:
- 候选键为(A,B)
- 存在依赖关系 A→C, B→D

2. 该关系已经满足1NF,因为所有属性都是原子的。

3. 该关系确实满足2NF的要求:
- 首先满足1NF
- 所有非主属性(C和D)都完全依赖于候选键(A,B),而不存在部分依赖

4. 但不满足3NF和BCNF:
- C只依赖于A,D只依赖于B,这说明存在传递依赖
- 存在非主属性对候选键的部分依赖(A→C和B→D)

分析其他选项:
A错误:虽然该关系确实满足1NF,但题目要求选择最高的范式级别,该关系达到了2NF。

C错误:由于存在传递依赖,不满足3NF的要求。

D错误:不满足BCNF的要求,因为存在决定因素不是候选键的函数依赖。

因此B选项(2NF)是正确答案,因为该关系正好满足2NF的所有要求,但未能达到更高的范式级别。
知识点:数据库
题友讨论(24)
nomico271 的答案错误,
正确答案看这里
nomico271 的答案错误,
正确答案看这里
15 回复
发布于 2017-11-25 11:19
这题不满足3NF吧?应该选2NF吧?材料名可以唯一确定生产厂,所以存在传递依赖。谁来给我解释一下?谢谢
这题不满足3NF吧?应该选2NF吧?材料名可以唯一确定生产厂,所以存在传递依赖。谁来给我解释一下?谢谢
13 回复
发布于 2018-05-31 10:05
看下我发表的是不是能解答你的疑惑,如果写的不对还请帮忙指出下哈
看下我发表的是不是能解答你的疑惑,如果写的不对还请帮忙指出下哈
点赞 回复
发布于 2018-07-20 15:34
0
这个题撑死3NF但是确实答案错了应该是2NF 存在对主属性的传递依赖
这个题撑死3NF但是确实答案错了应该是2NF 存在对主属性的传递依赖
2 回复
发布于 2018-08-25 16:30
0
展开5条回复
BCNF是函数依赖的每个决定因素中都包含码,其实这种题很扯,没给出函数依赖集,只能自己判断了,首先确定材料号是主码,其他两个都有它确定,没有其他函数依赖的话,就是BCNF
BCNF是函数依赖的每个决定因素中都包含码,其实这种题很扯,没给出函数依赖集,只能自己判断了,首先确定材料号是主码,其他两个都有它确定,没有其他函数依赖的话,就是BCNF
8 回复
发布于 2020-04-04 10:55 来自Android客户端
首先,这道题的主码只有材料号,给定材料号可以得到其他两个,为什么材料名不是主码,因为给你型材你能得到材料号到底是多少吗?
而厂家可以由材料号得到,也可以由材料名得到,给定线材或者型材一定得到武汉,给定板材一定可以得到广东,所以存在材料号---材料名--厂家这个传递依赖。不满足3NF,主码只有一个属性,不存在部分依赖,选2NF。
首先,这道题的主码只有材料号,给定材料号可以得到其他两个,为什么材料名不是主码,因为给你型材你能得到材料号到底是多少吗?
而厂家可以由材料号得到,也可以由材料名得到,给定线材或者型材一定得到武汉,给定板材一定可以得到广东,所以存在材料号---材料名--厂家这个传递依赖。不满足3NF,主码只有一个属性,不存在部分依赖,选2NF。
7 回复
发布于 2018-08-30 16:03
第一范式( 1NF ):在第一范式( 1NF )中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
第二范式( 2NF ):首先满足1NF,再要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键、主码。
第三范式( 3NF ):首先满足2NF,再要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
第一范式( 1NF ):在第一范式( 1NF )中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
第二范式( 2NF ):首先满足1NF,再要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键、主码。
第三范式( 3NF ):首先满足2NF,再要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
6 回复
发布于 2017-07-30 09:11
选D ,BCNF 。没有其他函数依赖的话,就是BCNF
选D ,BCNF 。没有其他函数依赖的话,就是BCNF
3 回复
发布于 2021-05-12 15:33
支持
支持
点赞 回复
发布于 2024-08-30 07:44 山东 来自Android客户端
0
1NF的定义为:符合1NF的关系中的每个属性都不可再分
2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖
3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖
BCNF:在 3NF 的基础上消除主属性对于码的部分与传递函数依赖
1NF的定义为:符合1NF的关系中的每个属性都不可再分
2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖
3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖
BCNF:在 3NF 的基础上消除主属性对于码的部分与传递函数依赖
2 回复
发布于 2020-04-21 13:06
把里面的几项改成,  学号, 姓名, 家乡 ,BCNF 我觉得ok, 名可以一样, 产地也可以一样, 唯一主键是编号
把里面的几项改成,  学号, 姓名, 家乡 ,BCNF 我觉得ok, 名可以一样, 产地也可以一样, 唯一主键是编号
2 回复
发布于 2020-03-07 16:18
BCNF实际上是在第三范式的基础上,进一步消除了主属性的传递依赖
BCNF实际上是在第三范式的基础上,进一步消除了主属性的传递依赖
2 回复
发布于 2018-09-04 19:58
这里说一下个人理解……。
因为是一个列不可划分的二维表,所以是 1NF
满足2NF,要先写出它的码。这里我认为有两个码,一个是材料号,一个是材料名。都可以由自己推出其他全部的字段。每个码都是单独一个字段,所以不存在非主属性对码的部分函数依赖。
满足3NF,即满足非主属性对主属性的传递函数依赖。也就是说存在一个非主属性y, 码x能够推出y,y能够推出另一个非主属性z。但是这里只有一个非主属性,所以不成立。所以它是3NF
对于BCNF,主要是针对多个属性组成的码,定义是:x->y 并且y不属于x,x中必含有候选码。假设有x,y,z组成的候选码,有x->y 满足上面的条件,但是x不包含候选码。(因为已经满足了3NF,所以不必考虑非主属性的影响。)这道题,两个候选码都是单属性,因此也不存在这种问题。
因此是BCNF
这里说一下个人理解……。
因为是一个列不可划分的二维表,所以是 1NF
满足2NF,要先写出它的码。这里我认为有两个码,一个是材料号,一个是材料名。都可以由自己推出其他全部的字段。每个码都是单独一个字段,所以不存在非主属性对码的部分函数依赖。
满足3NF,即满足非主属性对主属性的传递函数依赖。也就是说存在一个非主属性y, 码x能够推出y,y能够推出另一个非主属性z。但是这里只有一个非主属性,所以不成立。所以它是3NF
对于BCNF,主要是针对多个属性组成的码,定义是:x->y 并且y不属于x,x中必含有候选码。假设有x,y,z组成的候选码,有x->y 满足上面的条件,但是x不包含候选码。(因为已经满足了3NF,所以不必考虑非主属性的影响。)这道题,两个候选码都是单属性,因此也不存在这种问题。
因此是BCNF
2 回复
发布于 2018-07-20 15:32
答案错了,别套了,之前相同的答案是2NF这个最高是3NF, BCNF是没有非主属性,很显然最后一个数据项不能为主属性
答案错了,别套了,之前相同的答案是2NF这个最高是3NF, BCNF是没有非主属性,很显然最后一个数据项不能为主属性
点赞 回复
发布于 2018-08-25 16:28
0
我只能说你的理解一塌糊涂,前面有一个相同的题目,答案和这不一样
我只能说你的理解一塌糊涂,前面有一个相同的题目,答案和这不一样
点赞 回复
发布于 2018-08-30 15:59
0
收起
  • 1
  • 2
单选题
Linux
26.
在 Linux 中,下面文件及对应作用说法错误的是()
A
/etc/group:包含系统中的用户组信息,如组名、组ID和组成员
B
/etc/passwd:包含用户的加密密码和其他安全相关的信息
C
/etc/sudoers:sudo配置文件,用于定义哪些用户可以以超级用户权限执行命令
D
/etc/hosts:用于映射主机名与IP地址的关系
正确答案:B
你的答案:未作答
官方解析:
这道题目考察了Linux系统中重要配置文件的作用。B选项说法错误,应当被选择。

/etc/passwd文件并不包含用户的加密密码,它主要存储了系统中所有用户的基本信息,如用户名、用户ID、主目录、默认shell等。用户的加密密码实际上存储在/etc/shadow文件中,这是出于安全考虑。

分析其他选项:

A正确: /etc/group文件确实存储了系统中所有用户组的信息,包括组名、组ID以及组内成员列表。

C正确: /etc/sudoers是sudo命令的配置文件,用于定义哪些用户或用户组可以使用sudo命令获取root权限,以及可以执行哪些命令。

D正确: /etc/hosts文件用于设置主机名和IP地址的映射关系,是一个本地DNS查询文件,系统会优先查询这个文件来解析主机名。

知识扩展:
Linux将用户密码从/etc/passwd移动到/etc/shadow的主要原因是加强安全性,因为/etc/shadow只有root用户才能访问,而/etc/passwd对所有用户都是可读的。
知识点:Linux
题友讨论(1)
A. /etc/group:包含系统的用户组信息,如组名、组ID和组成员。 这个说法是正确的。/etc/group 文件包含了系统中的所有用户组的信息,包括组名、组ID以及组成员列表。 B. /etc/passwd:包含用户的加密密码和其他安全相关信息。 这个说法是错误的。/etc/passwd 文件确实包含了有关系统中所有用户的必要信息,例如用户名、密码字段、用户ID (UID) 和组ID (GID),但是密码字段现在通常为空或者指向另一个文件,因为实际的加密密码并不存放在这个文件里,而是存储在其他地方,比如shadow文件。 C. /etc/sudoers:sudo配置文件,用于定义哪些用户可以以超级用户权限执行命令。 这个说法是正确的。/etc/sudoers 是一个重要的配置文件,用于控制哪些用户或组可以通过sudo命令来执行特定的命令,从而获得超级用户权限。 D. /etc/hosts:用于映射主机名与IP地址的关系。 这个说法是正确的。/etc/hosts 文件是一个本地DNS解析文件,其中包含了主机名与其对应的IP地址的映射关系。 综上所述,本题答案选B。
A. /etc/group:包含系统的用户组信息,如组名、组ID和组成员。 这个说法是正确的。/etc/group 文件包含了系统中的所有用户组的信息,包括组名、组ID以及组成员列表。 B. /etc/passwd:包含用户的加密密码和其他安全相关信息。 这个说法是错误的。/etc/passwd 文件确实包含了有关系统中所有用户的必要信息,例如用户名、密码字段、用户ID (UID) 和组ID (GID),但是密码字段现在通常为空或者指向另一个文件,因为实际的加密密码并不存放在这个文件里,而是存储在其他地方,比如shadow文件。 C. /etc/sudoers:sudo配置文件,用于定义哪些用户可以以超级用户权限执行命令。 这个说法是正确的。/etc/sudoers 是一个重要的配置文件,用于控制哪些用户或组可以通过sudo命令来执行特定的命令,从而获得超级用户权限。 D. /etc/hosts:用于映射主机名与IP地址的关系。 这个说法是正确的。/etc/hosts 文件是一个本地DNS解析文件,其中包含了主机名与其对应的IP地址的映射关系。 综上所述,本题答案选B。
点赞 回复
发布于 2024-06-13 10:33 广东 来自Android客户端
收起
单选题
Linux
27.
Linux中,执行下面代码将打印多少个 "-" ()
1
2
3
4
5
6
7
8
int main(void){
    int i;
    for(i=0;i<4;i++){
        fork();
        printf("-\n");
    }
    return 0;
}
A
16
B
30
C
32
D
15
正确答案:B
你的答案:未作答
官方解析:
i=0 时,主进程和其创建的子进程分别打印 '-',  打印 2 个
i=1 时,之前两个进程打印 '-', 每个进程又创建新的子进程, 共打印 4 个 '-'
i=2 时,之前的四个进程分别打印 '-', 并创建新的子进程, 故共打印 8 个 '-'
i=3 时,之前的 8 个进程分别打印 '-', 并创建新的子进程,故共打印 16 个 '-'
综上所述, 共打印 2+4+8+16=30 个
知识点:Linux、C++工程师、2016、Linux
题友讨论(47)
i=0时,主进程和其创建的子进程分别打印'-',  打印2个
i=1时,之前两个进程打印'-', 每个进程又创建新的子进程, 共打印4个'-'
i=2时,之前的四个进程分别打印'-', 并创建新的子进程, 故共打印8个'-'
i=3时,之前的8个进程分别打印'-', 并创建新的子进程,故共打印16个'-'
综上所述, 共打印2+4+8+16=30个
i=0时,主进程和其创建的子进程分别打印'-',  打印2个
i=1时,之前两个进程打印'-', 每个进程又创建新的子进程, 共打印4个'-'
i=2时,之前的四个进程分别打印'-', 并创建新的子进程, 故共打印8个'-'
i=3时,之前的8个进程分别打印'-', 并创建新的子进程,故共打印16个'-'
综上所述, 共打印2+4+8+16=30个
143 回复
发布于 2015-08-15 17:18
赞同。
赞同。
1 回复
发布于 2015-09-06 11:36
0
简单粗暴
简单粗暴
1 回复
发布于 2015-10-11 20:22
0
展开1条回复
fork的题可以按以下公式来算。

主进程1分为2,每个子进程1分为2,构成一个二叉树,树高等于循环的次数n。
最后一层是最后得到的子进程数,它是偶数,等于2^n,前面有一题,循环5次有32个进程。

本题是求fork了多少次,即二叉数的节点数,它等于2^(n+1)-1,注意第一次fork后就会打印2个模杠,实际上没有第0次。
所以是2^(n+1) - 1 -1当n=4时,得30.
fork的题可以按以下公式来算。

主进程1分为2,每个子进程1分为2,构成一个二叉树,树高等于循环的次数n。
最后一层是最后得到的子进程数,它是偶数,等于2^n,前面有一题,循环5次有32个进程。

本题是求fork了多少次,即二叉数的节点数,它等于2^(n+1)-1,注意第一次fork后就会打印2个模杠,实际上没有第0次。
所以是2^(n+1) - 1 -1当n=4时,得30.
51 回复
发布于 2015-08-13 21:52
我在自己机器上运行怎么有60多?
我在自己机器上运行怎么有60多?
2 回复
发布于 2015-08-15 23:09
0
您好,有点不明白的地方,望指点! 我觉得这题求的应该不是fork的次数,一次fork打印2个&ldquo;-\n&rdquo;,所以这一题应该是求fork次数的2倍。按照您说的构造二叉树,二叉树中最后一层的叶子节点都是没有再执行fork的,所以从这颗二叉树来看,fork的次数就是除叶子节点外的其他节点总数。也就只计算3层的节点总数2^(3+1)-1=15,一次fork打印2个&ldquo;-\n&rdquo;,所以一共打印了2*15=30
您好,有点不明白的地方,望指点! 我觉得这题求的应该不是fork的次数,一次fork打印2个“-\n”,所以这一题应该是求fork次数的2倍。按照您说的构造二叉树,二叉树中最后一层的叶子节点都是没有再执行fork的,所以从这颗二叉树来看,fork的次数就是除叶子节点外的其他节点总数。也就只计算3层的节点总数2^(3+1)-1=15,一次fork打印2个“-\n”,所以一共打印了2*15=30
点赞 回复
发布于 2015-08-20 17:05
0
展开2条回复
感觉这样看能简单点:
fork();        //执行后有2个进程
printf("-\n");  //打印2次
fork();        //2翻倍为4
printf("-\n");  //打印4次
fork();        //4翻倍为8
printf("-\n");  //打印8次
fork();        //8翻倍为16
printf("-\n");  //打印16次
2+4+8+16 = 30

感觉这样看能简单点:
fork();        //执行后有2个进程
printf("-\n");  //打印2次
fork();        //2翻倍为4
printf("-\n");  //打印4次
fork();        //4翻倍为8
printf("-\n");  //打印8次
fork();        //8翻倍为16
printf("-\n");  //打印16次
2+4+8+16 = 30

31 回复
发布于 2015-08-20 12:18
您好,能否请教下fock()的作用
您好,能否请教下fock()的作用
点赞 回复
发布于 2019-05-06 11:55
0
创建进程的函数
创建进程的函数
点赞 回复
发布于 2019-08-30 08:06
0
fork()函数执行一次,创建一个新进程并且复制父进程数据到新进程,即创建父进程的一个副本,其中它的返回值为0表示新建子进程,大于0(子进程pid)表示父进程,小于0表示出错。
i=0时打印2个-
i=1时打印2*2个-
i=2时打印2*2*2个-
i=3时打印2*2*2*2个-
合计2+4+8+16=30个
fork()函数执行一次,创建一个新进程并且复制父进程数据到新进程,即创建父进程的一个副本,其中它的返回值为0表示新建子进程,大于0(子进程pid)表示父进程,小于0表示出错。
i=0时打印2个-
i=1时打印2*2个-
i=2时打印2*2*2个-
i=3时打印2*2*2*2个-
合计2+4+8+16=30个
13 回复
发布于 2015-08-13 13:03
  fork(); printf("-\n");
每次调用fork()函数之后,父线程和创建出的子线程都是从fork()后开始执行,意味着父线程和子线程将分别执行一次printf。

所以  1次 fork()调用  
对应着 2次printf()调用 
对应着 创建1个子线程

i = 4时,一共创建了2^4-1个子线程,也就是有15次fork()调用, 所以调用了30次printf
  fork(); printf("-\n");
每次调用fork()函数之后,父线程和创建出的子线程都是从fork()后开始执行,意味着父线程和子线程将分别执行一次printf。

所以  1次 fork()调用  
对应着 2次printf()调用 
对应着 创建1个子线程

i = 4时,一共创建了2^4-1个子线程,也就是有15次fork()调用, 所以调用了30次printf
6 回复
发布于 2015-08-20 18:59
5 回复
发布于 2019-12-28 15:50
2+4+8+16=30
2+4+8+16=30
5 回复
发布于 2015-08-13 22:15
fork()类型题:分别有
1.先 fork();,再 printf()不换行类型(存储到缓冲区),
2.先fork();再 printfIn()换行类型(直接输出)
3.先printf()不换行类型(存储到缓冲区),再 fork();
 4. printfIn()换行类型(直接输出),再fork(); 
说明:fork();子线程会复制父线程缓冲区的数据!!
fork()类型题:分别有
1.先 fork();,再 printf()不换行类型(存储到缓冲区),
2.先fork();再 printfIn()换行类型(直接输出)
3.先printf()不换行类型(存储到缓冲区),再 fork();
 4. printfIn()换行类型(直接输出),再fork(); 
说明:fork();子线程会复制父线程缓冲区的数据!!
3 回复
发布于 2019-09-29 12:43
2+4+8+16=30
2+4+8+16=30
3 回复
发布于 2017-06-08 20:24
我想说,我运行出来是64个求解答,答案不对,我的系统是ubuntu 14-04?
#include<stdio.h>
#include<unistd.h>
int main()
{
    int i;
    int j = 0;
    for(i=0; i<4; i++)
    {
        fork();
        printf("%d  ", j++);
    }
}
运行结果:a.out
0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3
由于ubuntu截图很糟,我保证数据完全正确
我想说,我运行出来是64个求解答,答案不对,我的系统是ubuntu 14-04?
#include<stdio.h>
#include<unistd.h>
int main()
{
    int i;
    int j = 0;
    for(i=0; i<4; i++)
    {
        fork();
        printf("%d  ", j++);
    }
}
运行结果:a.out
0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3  0  1  2  3
由于ubuntu截图很糟,我保证数据完全正确
3 回复
发布于 2015-09-14 22:32
你在输出的时候加个\n
你在输出的时候加个\n
点赞 回复
发布于 2015-09-30 00:11
0
没有刷新缓冲区,行缓冲区的标志是\n
没有刷新缓冲区,行缓冲区的标志是\n
点赞 回复
发布于 2015-10-19 08:57
0
展开2条回复
收起
  • 1
  • 2
  • 3
  • 4
多选题
Java
28.
Java创建对象的说法正确的有()
A
用new语句创建对象,是最常见的创建对象的方法。
B
运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
C
调用对象的clone()方法。
D
运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。
正确答案:ABCD
你的答案:未作答
官方解析:
在Java中创建对象共有四种常见方式,题目中给出的ABCD选项都是正确的方法。让我们逐一分析:

A选项:使用new操作符创建对象是最基本也是最常用的方式。例如:
Student student = new Student();
这种方式直接调用构造方法创建对象,简单直接。

B选项:通过反射机制创建对象是一种动态创建对象的方式。可以通过以下两种方式:
- Class类的newInstance()方法
- Constructor类的newInstance()方法
这种方式的优点是可以动态加载类并创建对象。

C选项:clone()方法是Object类的一个protected方法,可以创建一个对象的副本。使用这种方式需要:
- 实现Cloneable接口
- 重写clone()方法
这种方式的特点是可以快速复制一个已有对象。

D选项:通过反序列化方式创建对象是指:
将之前序列化到磁盘的对象数据重新读取并转换成对象。需要:
- 类实现Serializable接口
- 使用ObjectInputStream的readObject()方法
这种方式常用于网络传输或持久化场景。

这四种方式各有特点和适用场景:
- new操作符适用于普通对象创建
- 反射方式适用于动态加载场景
- clone方式适用于对象复制场景
- 反序列化方式适用于数据传输场景
知识点:Java、Java工程师、2018
题友讨论(57)
Java有5种方式来创建对象: 1、使用 new 关键字(最常用): ObjectName obj = new ObjectName(); 2、使用反射的Class类的newInstance()方法: ObjectName obj = ObjectName.class.newInstance(); 3、使用反射的Constructor类的newInstance()方法: ObjectName obj = ObjectName.class.getConstructor.newInstance(); 4、使用对象克隆clone()方法: ObjectName obj = obj.clone(); 5、使用反序列化(ObjectInputStream)的readObject()方法: try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) { ObjectName obj = ois.readObject(); }
Java有5种方式来创建对象: 1、使用 new 关键字(最常用): ObjectName obj = new ObjectName(); 2、使用反射的Class类的newInstance()方法: ObjectName obj = ObjectName.class.newInstance(); 3、使用反射的Constructor类的newInstance()方法: ObjectName obj = ObjectName.class.getConstructor.newInstance(); 4、使用对象克隆clone()方法: ObjectName obj = obj.clone(); 5、使用反序列化(ObjectInputStream)的readObject()方法: try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) { ObjectName obj = ois.readObject(); }
310 回复
发布于 2019-07-22 14:49
厉害
厉害
5 回复
发布于 2019-09-12 04:45
0
clone默认会创建对象吗?
clone默认会创建对象吗?
点赞 回复
发布于 2020-06-29 09:29 来自Android客户端
0
展开28条回复
Java有5种方式来创建对象:
  1. 使用 new 关键字(最常用): ObjectName obj = new ObjectName();
  2. 使用反射的Class类的newInstance()方法: ObjectName obj = ObjectName.class.newInstance(); 
  3. 使用反射的Constructor类的newInstance()方法: ObjectName obj = ObjectName.class.getConstructor.newInstance();
  4. 使用对象克隆clone()方法: ObjectName obj = obj.clone(); 
  5. 使用反序列化(ObjectInputStream)的readObject()方法: try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) { ObjectName obj = ois.readObject(); }
Java有5种方式来创建对象:
  1. 使用 new 关键字(最常用): ObjectName obj = new ObjectName();
  2. 使用反射的Class类的newInstance()方法: ObjectName obj = ObjectName.class.newInstance(); 
  3. 使用反射的Constructor类的newInstance()方法: ObjectName obj = ObjectName.class.getConstructor.newInstance();
  4. 使用对象克隆clone()方法: ObjectName obj = obj.clone(); 
  5. 使用反序列化(ObjectInputStream)的readObject()方法: try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) { ObjectName obj = ois.readObject(); }
115 回复
发布于 2019-12-24 10:27
Mark
Mark
点赞 回复
发布于 2022-09-15 15:27 四川 来自iOS客户端
0
m
m
点赞 回复
发布于 2023-04-04 11:01 湖北 来自iOS客户端
0
展开4条回复

Java创建对象的5种方式:

  • 1.new
  • 2.对象克隆clone()方法
  • 3.反射Constructor类的newInstance()方法
  • 4.反射的Class类的newInstance()方法
  • 5.反序列化的readObject()方法

Java创建对象的5种方式:

  • 1.new
  • 2.对象克隆clone()方法
  • 3.反射Constructor类的newInstance()方法
  • 4.反射的Class类的newInstance()方法
  • 5.反序列化的readObject()方法
10 回复
发布于 2021-07-16 20:15
1new,2序列化,3原型模式,4反射,5构造器类
1new,2序列化,3原型模式,4反射,5构造器类
9 回复
发布于 2019-09-15 17:51
clone 原型模式和单例模式不算吧 new对应构造方法
clone 原型模式和单例模式不算吧 new对应构造方法
点赞 回复
发布于 2020-11-09 23:28
0

对象实例化

  • new实例化对象(调用了构造方法)
  • 反射实例化对象(调用了构造方法)
  • clone()实例化对象(没有调用构造方法)
  • 反序列化实例化对象(没有调用构造方法)

对象实例化

  • new实例化对象(调用了构造方法)
  • 反射实例化对象(调用了构造方法)
  • clone()实例化对象(没有调用构造方法)
  • 反序列化实例化对象(没有调用构造方法)
3 回复
发布于 2021-12-28 12:46
java创建对象的方式:
1.使用new关键字:
    调用类提供的构造器创建对象;

2.使用newInstance()方法:
    通过反射生成对象
    (1)使用class对象的newInstance()方法    ------->     class对象对应类的实例
    (2)使用class对象获取指定Constructor对象    ------->     再调用Constructor对象的newInstance()方法   ------->     class对象对应类的实例

3.使用clone()方法:
    Java.lang.Object类中有一个clone()方法
    · 在类的内部,重写Object类的clone()方法;
    · 调用clone()方法的对象所属的类(class)必须实现Clonable接口
4.利用反序列创建对象
java创建对象的方式:
1.使用new关键字:
    调用类提供的构造器创建对象;

2.使用newInstance()方法:
    通过反射生成对象
    (1)使用class对象的newInstance()方法    ------->     class对象对应类的实例
    (2)使用class对象获取指定Constructor对象    ------->     再调用Constructor对象的newInstance()方法   ------->     class对象对应类的实例

3.使用clone()方法:
    Java.lang.Object类中有一个clone()方法
    · 在类的内部,重写Object类的clone()方法;
    · 调用clone()方法的对象所属的类(class)必须实现Clonable接口
4.利用反序列创建对象
2 回复
发布于 2023-02-10 10:54 四川
Java有5种方式来创建对象:
使用 new 关键字(最常用): ObjectName obj = new ObjectName();
使用反射的Class类的newInstance()方法: ObjectName obj = ObjectName.class.newInstance();&nbsp;
使用反射的Constructor类的newInstance()方法: ObjectName obj = ObjectName.class.getConstructor.newInstance();
使用对象克隆clone()方法: ObjectName obj = obj.clone();&nbsp;
使用反序列化(ObjectInputStream)的readObject()方法: try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) { ObjectName obj = ois.readObject(); }
Java有5种方式来创建对象:
使用 new 关键字(最常用): ObjectName obj = new ObjectName();
使用反射的Class类的newInstance()方法: ObjectName obj = ObjectName.class.newInstance(); 
使用反射的Constructor类的newInstance()方法: ObjectName obj = ObjectName.class.getConstructor.newInstance();
使用对象克隆clone()方法: ObjectName obj = obj.clone(); 
使用反序列化(ObjectInputStream)的readObject()方法: try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) { ObjectName obj = ois.readObject(); }
2 回复
发布于 2021-05-07 17:42
class也有newinstance方法呀😶😶
class也有newinstance方法呀😶😶
2 回复
发布于 2020-02-12 12:12
不想说什么记下来就好了
不想说什么记下来就好了
2 回复
发布于 2019-11-16 10:59
    以下五种创建对象方法:
//创建对象方式一
        Class<Day15> c =  Day15.class;
        Day15 day15 = c.newInstance();
        //创建对象方式二
        Day15 day151 = new Day15();
        //创建对象方式三
        //使用反射的Constructor类的newInstance()方法:
        //Day15 day152 = Day15.class.getConstructor().newInstance();
        Class<Day15> n = Day15.class;
        Constructor<Day15> constructor = n.getConstructor();
        Day15 day152 = constructor.newInstance();
        //创建对象方式四使用对象克隆clone()方法:
        Day15 day153 = new Day15();
        Day15 clone =(Day15) day153.clone();
        //创建对象方式五使用反序列化(ObjectInputStream)的readObject()方法:
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Day15"));
        Day15 da =(Day15) ois.readObject();

    以下五种创建对象方法:
//创建对象方式一
        Class<Day15> c =  Day15.class;
        Day15 day15 = c.newInstance();
        //创建对象方式二
        Day15 day151 = new Day15();
        //创建对象方式三
        //使用反射的Constructor类的newInstance()方法:
        //Day15 day152 = Day15.class.getConstructor().newInstance();
        Class<Day15> n = Day15.class;
        Constructor<Day15> constructor = n.getConstructor();
        Day15 day152 = constructor.newInstance();
        //创建对象方式四使用对象克隆clone()方法:
        Day15 day153 = new Day15();
        Day15 clone =(Day15) day153.clone();
        //创建对象方式五使用反序列化(ObjectInputStream)的readObject()方法:
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Day15"));
        Day15 da =(Day15) ois.readObject();

1 回复
发布于 2022-03-18 17:55
收起
  • 1
  • 2
多选题
Java
29.

下面哪些赋值语句是正确的()

A
long test=012
B
float f=-412
C
int other =(int)true
D
double d=0x12345678
E
byte b=128
正确答案:ABD
你的答案:未作答
官方解析:
让我们逐个分析每个选项的正确性:

A. long test=012 - 正确
这是一个八进制数值赋值给long类型变量。012在八进制表示为十进制的10,完全在long类型范围内。

B. float f=-412 - 正确
这是将一个负整数赋值给float类型变量。-412是在float类型表示范围内的,可以自动类型转换。

C. int other =(int)true - 错误
布尔类型(boolean)不能转换为整型(int)。Java不支持boolean类型和数值类型之间的转换。

D. double d=0x12345678 - 正确
这是一个十六进制数值赋值给double类型变量。0x12345678表示一个十六进制数,在double类型范围内。

E. byte b=128 - 错误
byte类型的取值范围是-128到127。128超出了byte类型的范围,因此这个赋值是错误的。

所以ABD是正确的选项:
- A正确因为支持八进制表示
- B正确因为支持负数赋值给float
- C错误因为boolean不能转int
- D正确因为支持十六进制表示
- E错误因为超出byte范围
知识点:Java
题友讨论(228)
我成功的避开了所有正确答案
我成功的避开了所有正确答案
306 回复
发布于 2017-02-20 12:56
不知道这个题可以这样来理解不: 它呢就是涉及到一个基本数据类型之间的转换问题。。。 char跟boolean两个们就是看官了 -------》---------------》----------------》》》水顺流而下,越流越小(精度高) byte < short < int < long < float < double -------《---------------《----------------《《《水逆流而上,越走山越高,所以得要辅助
不知道这个题可以这样来理解不: 它呢就是涉及到一个基本数据类型之间的转换问题。。。 char跟boolean两个们就是看官了 -------》---------------》----------------》》》水顺流而下,越流越小(精度高) byte < short < int < long < float < double -------《---------------《----------------《《《水逆流而上,越走山越高,所以得要辅助
17 回复
发布于 2017-03-10 16:18
0
A是8进制,才反应过来。。。
A是8进制,才反应过来。。。
14 回复
发布于 2017-06-04 22:25
0
展开39条回复
java中不需要强制向下转型的合法数字类型转换图:core java书中有记载

java中不需要强制向下转型的合法数字类型转换图:core java书中有记载

104 回复
发布于 2016-12-28 16:47
强强强
强强强
点赞 回复
发布于 2018-04-28 16:06
0
int 转 float要丢失精度为啥不用强转啊?
int 转 float要丢失精度为啥不用强转啊?
3 回复
发布于 2018-08-16 00:54
0
展开11条回复
基本类型与基本封装类型
A和B选项如果为 Long Float,则是需要在数值后面加L和F,但是他们是基本类型,会进行转化,所以不需要带, 
基本类型与基本封装类型
A和B选项如果为 Long Float,则是需要在数值后面加L和F,但是他们是基本类型,会进行转化,所以不需要带, 
91 回复
发布于 2017-01-26 12:02
mark 基本类和封装类
mark 基本类和封装类
点赞 回复
发布于 2023-04-07 15:48 广东 来自Android客户端
0
mark
mark
点赞 回复
发布于 2023-05-30 21:06 福建 来自iOS客户端
0
展开6条回复
A:012默认是int类型,赋给long类型没错。                          正确
B:-412默认也是int类型,赋给float没错。                            正确
C:很明显布尔类型不能强转成其他数值类型。                     错误
D:0x12345678默认应该是int类型,赋给double没错。        正确
E:128 > 127默认是int类型,byte默认范围是(-128 ~ 127)。错误

A:012默认是int类型,赋给long类型没错。                          正确
B:-412默认也是int类型,赋给float没错。                            正确
C:很明显布尔类型不能强转成其他数值类型。                     错误
D:0x12345678默认应该是int类型,赋给double没错。        正确
E:128 > 127默认是int类型,byte默认范围是(-128 ~ 127)。错误

54 回复
发布于 2017-03-01 22:06
为什么018就不能赋值给long型呢
为什么018就不能赋值给long型呢
点赞 回复
发布于 2017-10-02 19:43
0
开头0表示8进制
开头0表示8进制
4 回复
发布于 2017-11-13 16:27
0
36 回复
发布于 2016-12-20 10:53
你好,问下你用的是什么编程软件?
你好,问下你用的是什么编程软件?
2 回复
发布于 2017-07-07 08:57
0
eclipse Neon
eclipse Neon
点赞 回复
发布于 2017-07-07 14:22
0
展开4条回复
java中0开头的数字表示8进制
java中0开头的数字表示8进制
31 回复
发布于 2019-03-09 17:40
float a = -412.0;                  编译错误,原因是-412.0默认是double型,要变成float型需要强制类型转换
float a = (float)-412.0;         编译通过
偷懒写法:float a = -412;    编译通过
标准写法:float a = -412f;
float a = -412.0;                  编译错误,原因是-412.0默认是double型,要变成float型需要强制类型转换
float a = (float)-412.0;         编译通过
偷懒写法:float a = -412;    编译通过
标准写法:float a = -412f;
31 回复
发布于 2018-03-31 18:51
大佬
大佬
1 回复
发布于 2021-12-05 11:06 来自Android客户端
0
float定义的值不加f么?
float定义的值不加f么?
14 回复
发布于 2017-01-08 19:05
如果是浮点数直接量默认是double类型的,此时必须加f或者F,但是如果赋值的是整数,因为是小类型赋给大类型,会自动类型转换,故不需要加f
如果是浮点数直接量默认是double类型的,此时必须加f或者F,但是如果赋值的是整数,因为是小类型赋给大类型,会自动类型转换,故不需要加f
7 回复
发布于 2017-01-08 20:29
0
A:自动类型转换,int转long
B:自动类型转换,int转float
C:boolean类型的不能强转为int
D:0x开头表示一个十六进制数,转换为二进制是:0001 0010 0011 0100 0101 0110 0111 1000,转换为十进制是:3.05419896E8
E:byte表示一个字节,包含8位,取值范围是-128~127
A:自动类型转换,int转long
B:自动类型转换,int转float
C:boolean类型的不能强转为int
D:0x开头表示一个十六进制数,转换为二进制是:0001 0010 0011 0100 0101 0110 0111 1000,转换为十进制是:3.05419896E8
E:byte表示一个字节,包含8位,取值范围是-128~127
10 回复
发布于 2018-06-13 08:53
A、B、D
A:正确。java中0开头的数字表示八进制。
B:正确,int自动类型转换为float(低精度向高精度)
C:错误,Java中boolean不可以和任何类型互相转换。
D:正确
E:128超出byte可表示得数字,默认为int,如果赋值给byte需要强制类型转换。
A、B、D
A:正确。java中0开头的数字表示八进制。
B:正确,int自动类型转换为float(低精度向高精度)
C:错误,Java中boolean不可以和任何类型互相转换。
D:正确
E:128超出byte可表示得数字,默认为int,如果赋值给byte需要强制类型转换。
7 回复
发布于 2022-02-03 12:49
收起
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 14
多选题
数据库
30.
mysql中查看SQL模式的命令是()
A
select @@global.sql_mode
B
select global.sql_mode
C
select @@sql_mode
D
select @@session.sql_mode
正确答案:ACD
你的答案:未作答
官方解析:
MySQL中的SQL模式可以通过多种方式查看,选项ACD都是有效的查看命令。

具体分析:

1. select @@global.sql_mode (A正确)
- 用于查看全局SQL模式设置
- @@global是系统变量的全局值的标识符

2. select @@sql_mode (C正确)
- 最简单的查看当前SQL模式的方法
- 不指定作用域时默认显示当前会话的SQL模式

3. select @@session.sql_mode (D正确)
- 用于查看当前会话的SQL模式设置
- @@session表示会话级别的系统变量

4. select global.sql_mode (B错误)
- 语法错误,缺少@@符号
- MySQL中访问系统变量需要使用@@符号

补充说明:
- 全局设置(@@global)影响所有新建的会话
- 会话设置(@@session)只影响当前会话
- @@sql_mode等同于@@session.sql_mode
- 这些命令都能查看SQL模式,只是作用范围不同

所以ACD都是正确的查看SQL模式的命令,而B选项因为语法错误不能使用。
知识点:数据库
题友讨论(10)
MySQL数据库中,变量分为 系统变量(以"@@"开头)和用户自定义变量。系统变量分为全局系统变量(global)和会话系统变量(session)。
@@global     仅用于访问全局系统变量的值;
@@session  仅用于访问会话系统变量的值;
@@              先访问会话系统变量的值,若不存在则去访问全局系统变量的值;
sql_mode 为系统变量,既是全局系统变量,又是会话系统变量。
题中 A,C,D 均正确。
MySQL数据库中,变量分为 系统变量(以"@@"开头)和用户自定义变量。系统变量分为全局系统变量(global)和会话系统变量(session)。
@@global     仅用于访问全局系统变量的值;
@@session  仅用于访问会话系统变量的值;
@@              先访问会话系统变量的值,若不存在则去访问全局系统变量的值;
sql_mode 为系统变量,既是全局系统变量,又是会话系统变量。
题中 A,C,D 均正确。
107 回复
发布于 2016-03-15 17:26
嗯,
    sql_mode 为系统变量,既是全局系统变量,又是会话系统变量。
ACD
mysql> select @@sql_mode;
+------------+
| @@sql_mode |
+------------+
|            |
+------------+
1 row in set (0.00 sec)

mysql> select @@global.sql_mode;
+-------------------+
| @@global.sql_mode |
+-------------------+
|                   |
+-------------------+
1 row in set (0.00 sec)

mysql> select @@session.sql_mode;
+--------------------+
| @@session.sql_mode |
+--------------------+
|                    |
+--------------------+
1 row in set (0.00 sec)
嗯,
    sql_mode 为系统变量,既是全局系统变量,又是会话系统变量。
ACD
mysql> select @@sql_mode;
+------------+
| @@sql_mode |
+------------+
|            |
+------------+
1 row in set (0.00 sec)

mysql> select @@global.sql_mode;
+-------------------+
| @@global.sql_mode |
+-------------------+
|                   |
+-------------------+
1 row in set (0.00 sec)

mysql> select @@session.sql_mode;
+--------------------+
| @@session.sql_mode |
+--------------------+
|                    |
+--------------------+
1 row in set (0.00 sec)
10 回复
发布于 2016-03-22 15:08
MySQL数据库中,变量分为 系统变量(以"@@"开头)和用户自定义变量。
系统变量分为
全局系统变量(global)
@@global     用于访问全局系统变量的值;
会话系统变量(session)
@@session  用于访问会话系统变量的值;
@@              先访问会话系统变量的值,若不存在则去访问全局系统变量的值;
sql_mode 为系统变量,既是全局系统变量,又是会话系统变量。
MySQL数据库中,变量分为 系统变量(以"@@"开头)和用户自定义变量。
系统变量分为
全局系统变量(global)
@@global     用于访问全局系统变量的值;
会话系统变量(session)
@@session  用于访问会话系统变量的值;
@@              先访问会话系统变量的值,若不存在则去访问全局系统变量的值;
sql_mode 为系统变量,既是全局系统变量,又是会话系统变量。
3 回复
发布于 2017-03-15 17:01

MySQL数据库中,变量分为 系统变量(以"@@"开头)和用户自定义变量。系统变量分为全局系统变量(global)和会话系统变量(session)。
@@global     仅用于访问全局系统变量的值;
@@session  仅用于访问会话系统变量的值;
@@              先访问会话系统变量的值,若不存在则去访问全局系统变量的值;
sql_mode 为系统变量,既是全局系统变量,又是会话系统变量。
题中 A,C,D 均正确。

MySQL数据库中,变量分为 系统变量(以"@@"开头)和用户自定义变量。系统变量分为全局系统变量(global)和会话系统变量(session)。
@@global     仅用于访问全局系统变量的值;
@@session  仅用于访问会话系统变量的值;
@@              先访问会话系统变量的值,若不存在则去访问全局系统变量的值;
sql_mode 为系统变量,既是全局系统变量,又是会话系统变量。
题中 A,C,D 均正确。
1 回复
发布于 2017-08-22 22:48
@@global 只可以访问global @@session 访问会哈 @@先访问回话,再访问全局
@@global 只可以访问global @@session 访问会哈 @@先访问回话,再访问全局
点赞 回复
发布于 2024-03-31 01:45 广东 来自Android客户端
@@session仅用于访问会话系统变量的值
@@session仅用于访问会话系统变量的值
点赞 回复
发布于 2022-02-20 15:30 来自Android客户端
访问系统变量@@
@@global 访问全局系统变量
@@session 访问会话系统变量
访问系统变量@@
@@global 访问全局系统变量
@@session 访问会话系统变量
点赞 回复
发布于 2020-07-06 09:49
引用楼下:
MySQL数据库中,变量分为 系统变量(以"@@"开头)和用户自定义变量。系统变量分为全局系统变量(global)和会话系统变量(session)。
@@global     仅用于访问全局系统变量的值;
@@session  仅用于访问会话系统变量的值;
@@              先访问会话系统变量的值,若不存在则去访问全局系统变量的值;
sql_mode 为系统变量,既是全局系统变量,又是会话系统变量。
题中 A,C,D 均正确。

引用楼下:
MySQL数据库中,变量分为 系统变量(以"@@"开头)和用户自定义变量。系统变量分为全局系统变量(global)和会话系统变量(session)。
@@global     仅用于访问全局系统变量的值;
@@session  仅用于访问会话系统变量的值;
@@              先访问会话系统变量的值,若不存在则去访问全局系统变量的值;
sql_mode 为系统变量,既是全局系统变量,又是会话系统变量。
题中 A,C,D 均正确。

点赞 回复
发布于 2017-10-09 16:50
mysql> select @@sql_mode;
+----------------------------------------------------------------+
| @@sql_mode                                                     |
+----------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.02 sec)

mysql> select @@global.sql_mode;
+----------------------------------------------------------------+
| @@global.sql_mode                                              |
+----------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select @@sql_mode;
+----------------------------------------------------------------+
| @@sql_mode                                                     |
+----------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.02 sec)

mysql> select @@global.sql_mode;
+----------------------------------------------------------------+
| @@global.sql_mode                                              |
+----------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------+
1 row in set (0.00 sec)

点赞 回复
发布于 2015-12-09 14:34
应该选择AC吗
应该选择AC吗
点赞 回复
发布于 2016-03-01 18:26
0
收起